繁体   English   中英

C#中的Parallel.Foreach和并行执行

[英]Parallel.Foreach and Parallel Execution in C#

我的任务是扫描所有文件夹名称以“xyz”开头并行。 我的意思是,如果一个文件夹同时扫描,其他人也应该扫描。 我不想一个一个扫描。

为此,我使用了Parallel Foreach。

问题是? 它是否正确? 并且如何知道它是否并行运行(将任何消息放在哪里)?

Parallel.ForEach(path, currentPath =>
   {
    var output = programReader.GetData(currentPath, durReader.dirPattern);

    foreach (var item in output)
      {
        foreach (var project in item.Name)
           Console.WriteLine(item.serverName + " " + item.serverNumber + " " + fileName);
        }
     }

编辑:

Parallel.Foreach仅适用于多核系统,或者它也可以在单核系统上运行以执行显示并行性

渴望 - 如果你问一个问题,请提出问题。 这是一个很好的迹象,这不是一个问题。

其次,你的方法没有多大意义。 并行将非常平行。 好。 不好:你还有一张光盘。 结果:任务等待。 在硬件支持的程度上对IO操作进行并列化是没有意义的。

并行扩展分割了每个核心的负载 - 尽管我不确定它们是否考虑了超线程核心。

但是,要添加另一个答案,引导您朝着正确的方向前进:

不要试图并行执行此操作。 磁盘一次只能处理一个请求,因此您可能只是放慢速度,因为磁盘队列可能会变大。

您可能能够提高性能的唯一方案是,您扫描的位置实际上是存储分布和高度复制的SAN。

您可以打印Thread.ManagedThreadId值以查看正在使用的线程。

Parallel.ForEach或Parallel.Execute使用处理器的核心。 因此,如果您的处理器拥有更多的核心,那么它们将同样用于运行此线程。 你在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM