我有一个庞大的集合,我想以并行方式处理每个对象。同步执行相同的操作通常涉及一个简单的“foreach”。
只是想知道,在我的场景中使用什么,即 Parallel.ForEach 或 MyCollection.AsParallel().ForAll()。
你能告诉我使用一个与另一个的好处吗?
我有一个庞大的集合,我想以并行方式处理每个对象。同步执行相同的操作通常涉及一个简单的“foreach”。
只是想知道,在我的场景中使用什么,即 Parallel.ForEach 或 MyCollection.AsParallel().ForAll()。
你能告诉我使用一个与另一个的好处吗?
我看到它的方式,如果你想做的只是并行化 a foreach
,你应该使用它的并行版本,即Parallel.ForEach()
.
ParallelEnumerable.ForAll()
适用于您有一个 LINQ 查询后跟 aforeach
并且您希望将它们都并行化的特定情况。因此,您所做的是通过添加并行化 LINQ 查询AsParallel()
,然后foreach
通过将其更改为ForAll()
.
计时并选择获胜者。
我发现 Parallel.ForEach 在最令人愉快的并行场景中表现更好。它似乎使用了更高级的工作平衡模型。PLINQ 主要针对并行化查询。
我的 2 美分:
您可以使用扩展方法ForAll
指定所需的并行度。WithDegreeOfParallelism
与ForEach
您只能限制最高级别。
基本上,您可以强制ForAll
使用更多线程。