是否应该有并行复制文件而不是并行复制文件?

the*_*ist 4 c# multithreading file multiprocessing task-parallel-library

我尝试使用以下两种解决方案复制200个文件,但我没有看到差异(我曾经System.Diagnostics.Stopwatch测量过时间).在这两种情况下花了8秒钟.第二个(并行)解决方案不应该更快吗?我想是因为使用Parallel的IO操作会加速复制.

我错过了什么?

// Case1 - Regular iteration
foreach (FileInfo file in files)
{
    string temppath = Path.Combine(destDirName, file.Name);
    file.CopyTo(temppath, false);
}

// Case2 - Parallel
Parallel.ForEach(files, file =>
{
    string temppath = Path.Combine(destDirName, file.Name);
    file.CopyTo(temppath, false);
});
Run Code Online (Sandbox Code Playgroud)

Ada*_*rth 5

并行执行任务并不能保证性能的提高.

在您的情况下,文件复制可能是IO绑定,而不是CPU绑定.CPU通常具有比IO设备更多的可用带宽(除非您碰巧使用Fusion IO卡或其他东西),因此IO操作往往会导致CPU等待很多.

使用大量CPU的任务可以并行完成,以获得性能提升.同样等待外部因素的任务也可以从转移到另一个线程中受益,以免成为阻塞任务.

但是,等待相同外部资源的任务可能看不到什么好处,除非外部资源本身可以处理与多个线程关联的流量(IO往往无法处理流量,实际上可能导致资源争用,放慢速度吧.