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)
并行执行任务并不能保证性能的提高.
在您的情况下,文件复制可能是IO绑定,而不是CPU绑定.CPU通常具有比IO设备更多的可用带宽(除非您碰巧使用Fusion IO卡或其他东西),因此IO操作往往会导致CPU等待很多.
使用大量CPU的任务可以并行完成,以获得性能提升.同样等待外部因素的任务也可以从转移到另一个线程中受益,以免成为阻塞任务.
但是,等待相同外部资源的任务可能看不到什么好处,除非外部资源本身可以处理与多个线程关联的流量(IO往往无法处理流量,实际上可能导致资源争用,放慢速度吧.
归档时间: |
|
查看次数: |
1423 次 |
最近记录: |