Parallel.ForEach与foreach的使用指南是什么?

9
我对Parallel.ForEach的性能特征很好奇。在Parallel.ForEach循环内给定任何有效构造,总是优先使用Parallel.ForEach而不是foreach循环吗?我特别想知道在处理小集合或其他边缘情况时调用Parallel Tasks库的开销是否比foreach循环更快。我知道该库在何时/如何生成线程方面非常聪明...是否有情况下最好将代码留在foreach循环中,还是调用Parallel Tasks的开销通常可以忽略不计,因此如果可以,应该使用Parallel.ForEach?
这个问题类似,并提供了良好的功能差异信息,但实际上并没有涉及性能。请注意,我忽略了与.NET <4的兼容性作为坚持使用foreach的原因: C#: Any benefit of List.ForEach(...) over plain foreach loop?

2个回答

13

我理解并同意性能测量,但最好有一个一般性的指导方针作为起点(比如你关于快速循环体的评论)。@Daniel Straight提供的下载链接也有一些不错的通用内容。http://www.microsoft.com/downloads/details.aspx?familyid=C3EA8FB5-650D-434B-A216-7E54C53965D1&displaylang=en - Emil Lerch
+1 参考并行编程编码指南。 - Steven

2

我认为在编程中应该始终坚持简单的方法(例如常规foreach循环),只有当你有明确的需求时才实现更复杂的操作(例如Parallel foreach循环)。因此,如果你能证明在某个特定的情况下,普通的foreach循环不够快,而且你可以证明Parallel foreach循环可以解决你的问题,那么就使用Parallel foreach循环。

否则,保持简单。


3
我不同意这个说法,“根据需要快”并不等同于“用户想要多快就有多快”。随着平均核心数量的增加,我们应该更频繁地考虑并行化事物。 - H H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接