Parallel.ForEach与foreach之间的准则是什么?

14 浏览
0 Comments

Parallel.ForEach与foreach之间的准则是什么?

我对Parallel.ForEach的性能特性很好奇。在Parallel.ForEach循环中,对于任何有效的结构,总是优先选择使用Parallel.ForEach而不是foreach循环吗?我特别想知道在处理小数据集或其他边缘情况时,调用Parallel Tasks库的开销是否比foreach循环更快。我知道该库在何时如何生成线程方面非常智能...是否有些情况下最好只使用foreach循环,或者调用Parallel Tasks的开销通常是可以忽略的,所以如果可以的话,应该使用Parallel.ForEach呢?这个问题类似,并提供了很好的功能差异信息,但并没有涉及性能问题。请注意,我忽略了兼容性到.NET <4的原因:C#:是否有List.ForEach(...)比普通foreach循环更好的好处?

0
0 Comments

在使用`Parallel.ForEach`和`foreach`循环时,有一些指导原则需要遵循。首先,应该始终使用简单的`foreach`循环,只有在确实需要更复杂的操作时才使用`Parallel.ForEach`循环。只有当你可以证明在某个特定实例中普通的`foreach`循环不够快,并且你可以证明对于该特定实例`Parallel.ForEach`循环能够解决问题时,才使用`Parallel.ForEach`循环。否则,保持简单。

然而,有人对此持不同意见。他认为,“不够快”并不等同于“用户希望的速度”。随着平均核心数的增加,我们应该更频繁地考虑并行化。

0
0 Comments

问题:Parallel.ForEach和foreach之间的指导原则是什么?

原因:Parallel.ForEach可能会降低性能,特别是对于快速循环体的情况。因此,需要对并行化前后的性能进行测量。并行计算组已经发布了其他有用的文章,可以参考。

解决方法:在并行化之前进行性能测量,并参考并行编程编码指南。可以从微软的下载链接中获取一些有用的通用资料。

文章:

在并行编程中,我们经常需要在集合上执行某些操作。传统的方法是使用foreach循环来遍历集合中的每个元素。然而,随着多核处理器的普及,我们可以使用并行编程技术来提高程序的性能。其中一个常用的工具是Parallel.ForEach方法。

Parallel.ForEach方法可以在多个线程上并行执行循环体中的操作。它将集合分成多个部分,并在多个线程上同时处理这些部分。这种并行化的方法可以加速循环的执行,尤其是对于处理时间较长的循环体来说。

然而,并不是所有情况下都适合使用Parallel.ForEach方法。对于处理时间很短的循环体来说,使用Parallel.ForEach可能会降低性能。因此,在并行化之前,我们需要进行性能测量,以确定使用Parallel.ForEach是否能够提高程序的执行速度。

微软的并行编程编码指南中列出了一些指导原则,可以帮助我们在使用Parallel.ForEach方法时做出正确的决策。其中一个指导原则就是在并行化之前和之后进行性能测量。通过对比两种方法的执行时间,我们可以确定是否应该使用Parallel.ForEach方法。

除了微软的并行编程编码指南外,微软的并行计算组还发布了其他有用的文章,可以帮助我们更好地理解和使用并行编程技术。这些文章提供了关于并行编程的一些通用信息和最佳实践,对于想要深入了解并行编程的开发人员来说非常有价值。

总之,在使用Parallel.ForEach方法之前,我们应该首先进行性能测量,并参考相关的指导原则和文章,以确保我们选择了适合当前情况的最佳方法。这样可以最大程度地提高程序的性能,并发挥多核处理器的优势。

0