gpt4 book ai didi

c# - 并行复制文件和不并行复制文件是否应该有区别?

转载 作者:太空狗 更新时间:2023-10-30 01:07:17 24 4
gpt4 key购买 nike

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

我错过了什么?

// 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);
});

最佳答案

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

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

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

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

关于c# - 并行复制文件和不并行复制文件是否应该有区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13045996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com