我有一个巨大的集合,我想以并行的方式处理每个对象。同步地执行相同操作通常涉及简单的“foreach”。
只是想知道在我的场景中使用什么,即Parallel.ForEach或MyCollection.AsParallel()。ForAll()。
你能否解释一下使用这一方与另一方的好处。
答案 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
使用更多线程。