Parallel.ForEach与foreach的指导原则是什么?

时间:2010-05-13 16:17:16

标签: .net .net-4.0

我很好奇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?

2 个答案:

答案 0 :(得分:10)

并不总是更可取。对于快速循环体,Parallel.ForEach会降低性能。 Parallel Programming Coding Guidelines中列出的指南之一是在并行化之前和之后衡量

其他有用的文章已由parallel computing group发布。

答案 1 :(得分:2)

我会说总是坚持简单(即常规foreach)并且只有在有可测量的要求时才实现更复杂的东西(即Parallel ForEach)。因此,如果您可以证明在特定实例中正常的foreach没有您所需的那么快,并且您可以证明并行foreach将解决您的问题的特定实例,那么使用Parallel。

否则只是保持简单。