23

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

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

你能告诉我使用一个与另一个的好处吗?

4

3 回答 3

23

我看到它的方式,如果你想做的只是并行化 a foreach,你应该使用它的并行版本,即Parallel.ForEach().

ParallelEnumerable.ForAll()适用于您有一个 LINQ 查询后跟 aforeach并且您希望将它们都并行化的特定情况。因此,您所做的是通过添加并行化 LINQ 查询AsParallel(),然后foreach通过将其更改为ForAll().

于 2013-06-04T16:29:11.180 回答
9

计时并选择获胜者。

我发现 Parallel.ForEach 在最令人愉快的并行场景中表现更好。它似乎使用了更高级的工作平衡模型。PLINQ 主要针对并行化查询。

于 2013-06-04T14:59:48.937 回答
3

我的 2 美分:

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

ForEach您只能限制最高级别。

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

于 2015-08-13T14:37:40.737 回答