Parallel.ForEach vs AsParallel()。ForAll

时间:2013-06-04 14:40:27

标签: .net task-parallel-library

我有一个巨大的集合,我想以并行的方式处理每个对象。同步地执行相同操作通常涉及简单的“foreach”。

只是想知道在我的场景中使用什么,即Parallel.ForEach或MyCollection.AsParallel()。ForAll()。

你能否解释一下使用这一方与另一方的好处。

3 个答案:

答案 0 :(得分:18)

我看到它的方式,如果您要做的就是并行化foreach,您应该使用其并行版本Parallel.ForEach()

ParallelEnumerable.ForAll()用于具有LINQ查询后跟foreach并且您希望并行化这两者的特定情况。因此,您要做的是通过添加AsParallel()来并行化LINQ查询,然后通过将foreach更改为ForAll()来并行化{{1}}。

答案 1 :(得分:6)

时间兼顾并挑选胜利者。

我发现Parallel.ForEach在大多数令人愉快的并行场景中表现更好。它似乎使用更先进的工作平衡模型。 PLINQ主要用于并行化查询。

答案 2 :(得分:1)

我的2美分:

使用ForAll,您可以使用WithDegreeOfParallelism扩展方法指定所需的并行级别。

使用ForEach,您只能限制最高级别。

基本上,您可以强制ForAll使用更多线程。