gpt4 book ai didi

c# - CPU 和内存峰值,在 Parallel.ForEach 期间

转载 作者:行者123 更新时间:2023-11-30 13:43:52 26 4
gpt4 key购买 nike

我正在构建一个复制文件和文件夹的工作应用程序,还有一些选项,但在本期中没有使用这些选项。

所讨论的函数遍历目录中的每个文件,然后将文件复制到相同目录的新位置(因此它保留了嵌套文件结构)。

该应用程序是一个 Windows 窗体,由于同时写入文本框的问题,我在 Task.Factory.StartNew() 中包含了并行函数,这解决了该问题。

Task.Factory.StartNew(() =>
{
Parallel.ForEach(Directory.GetFiles(root, "*.*", SearchOption.AllDirectories), newPath =>
{
try
{
File.Copy(newPath, newPath.Replace(root, destination), false);
WriteToOutput("recreated the file '" + newPath.Replace(root, destination) + "'");
}
catch (Exception e)
{
WriteToOutput(e.Message);
}
});
});

运行时,诊断工具每隔几秒就会显示一次峰值。我怎样才能“平衡”这些尖峰并使性能保持一致?我还为每个移动的文件写入屏幕,并且在每 20/25 个文件之间有明显的一秒左右的停顿。

下面的屏幕截图是诊断工具的示例。

enter image description here

最佳答案

您的工作主要是 IO 绑定(bind),而不是 CPU 绑定(bind)。大部分时间您没有任何工作需要 CPU 完成。您只是在等待硬盘驱动器 工作。 CPU 中的尖峰只是磁盘完成操作后的短时间段,在此期间 CPU 试图弄清楚下一步要做什么,这需要很少的时间,因此您看到尖峰而不是平稳状态的原因。

关于c# - CPU 和内存峰值,在 Parallel.ForEach 期间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49077864/

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