我很好奇Parallel.ForEach的性能特征。给定Parallel.ForEach循环中的任何有效构造,是否总是优先使用Parallel.ForEach而不是foreach循环?我特别想知道在小集合或其他边缘情况下调用并行任务库的开销,其中foreach循环可能更快。我知道库对于何时/如何生成线程非常聪明......有没有将代码留在foreach循环中更好的情况,或者调用并行任务的开销通常是可以忽略不计的,所以如果可以,你应该使用Parallel.ForEach?
这个问题类似,提供了良好的功能差异信息,但并没有真正说明性能。请注意,我忽略了与.NET< 4的兼容性作为与foreach保持一致的原因:
C#: Any benefit of List<T>.ForEach(...) over plain foreach loop?
答案 0 :(得分:10)
并不总是更可取。对于快速循环体,Parallel.ForEach会降低性能。 Parallel Programming Coding Guidelines中列出的指南之一是在并行化之前和之后衡量。
其他有用的文章已由parallel computing group发布。
答案 1 :(得分:2)
我会说总是坚持简单(即常规foreach)并且只有在有可测量的要求时才实现更复杂的东西(即Parallel ForEach)。因此,如果您可以证明在特定实例中正常的foreach没有您所需的那么快,并且您可以证明并行foreach将解决您的问题的特定实例,那么使用Parallel。
否则只是保持简单。