Parallel.ForEach与foreach之间的准则是什么?
Parallel.ForEach与foreach之间的准则是什么?
我对Parallel.ForEach的性能特性很好奇。在Parallel.ForEach循环中,对于任何有效的结构,总是优先选择使用Parallel.ForEach而不是foreach循环吗?我特别想知道在处理小数据集或其他边缘情况时,调用Parallel Tasks库的开销是否比foreach循环更快。我知道该库在何时如何生成线程方面非常智能...是否有些情况下最好只使用foreach循环,或者调用Parallel Tasks的开销通常是可以忽略的,所以如果可以的话,应该使用Parallel.ForEach呢?这个问题类似,并提供了很好的功能差异信息,但并没有涉及性能问题。请注意,我忽略了兼容性到.NET <4的原因:C#:是否有List
问题:Parallel.ForEach和foreach之间的指导原则是什么?
原因:Parallel.ForEach可能会降低性能,特别是对于快速循环体的情况。因此,需要对并行化前后的性能进行测量。并行计算组已经发布了其他有用的文章,可以参考。
解决方法:在并行化之前进行性能测量,并参考并行编程编码指南。可以从微软的下载链接中获取一些有用的通用资料。
文章:
在并行编程中,我们经常需要在集合上执行某些操作。传统的方法是使用foreach循环来遍历集合中的每个元素。然而,随着多核处理器的普及,我们可以使用并行编程技术来提高程序的性能。其中一个常用的工具是Parallel.ForEach方法。
Parallel.ForEach方法可以在多个线程上并行执行循环体中的操作。它将集合分成多个部分,并在多个线程上同时处理这些部分。这种并行化的方法可以加速循环的执行,尤其是对于处理时间较长的循环体来说。
然而,并不是所有情况下都适合使用Parallel.ForEach方法。对于处理时间很短的循环体来说,使用Parallel.ForEach可能会降低性能。因此,在并行化之前,我们需要进行性能测量,以确定使用Parallel.ForEach是否能够提高程序的执行速度。
微软的并行编程编码指南中列出了一些指导原则,可以帮助我们在使用Parallel.ForEach方法时做出正确的决策。其中一个指导原则就是在并行化之前和之后进行性能测量。通过对比两种方法的执行时间,我们可以确定是否应该使用Parallel.ForEach方法。
除了微软的并行编程编码指南外,微软的并行计算组还发布了其他有用的文章,可以帮助我们更好地理解和使用并行编程技术。这些文章提供了关于并行编程的一些通用信息和最佳实践,对于想要深入了解并行编程的开发人员来说非常有价值。
总之,在使用Parallel.ForEach方法之前,我们应该首先进行性能测量,并参考相关的指导原则和文章,以确保我们选择了适合当前情况的最佳方法。这样可以最大程度地提高程序的性能,并发挥多核处理器的优势。