Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Parallel.ForEach vs AsParallel().ForAll_.net_Task Parallel Library - Fatal编程技术网

.net Parallel.ForEach vs AsParallel().ForAll

.net Parallel.ForEach vs AsParallel().ForAll,.net,task-parallel-library,.net,Task Parallel Library,我有一个巨大的集合,我想以并行方式处理每个对象。同步执行同样的操作通常需要一个简单的“foreach” 只是想知道在我的场景中使用什么,即Parallel.ForEach或MyCollection.AsParallel().ForAll() 你能告诉我使用其中一个与另一个的好处吗。两个都选一个,然后选出赢家 我发现Parallel.ForEach在最令人愉快的并行场景中表现得更好。它似乎使用了更先进的工作平衡模型。PLINQ主要用于并行查询。在我看来,如果您只想并行化foreach,那么应该使用

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

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


你能告诉我使用其中一个与另一个的好处吗。

两个都选一个,然后选出赢家


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

在我看来,如果您只想并行化
foreach
,那么应该使用它的并行版本,即
parallel.foreach()

ParallelEnumerable.ForAll()
适用于以下特定情况:您有一个LINQ查询,后跟一个
foreach
,并且您希望将两者并行化。因此,您要做的是通过添加
aspallel()
来并行化LINQ查询,然后通过将
foreach
更改为
ForAll()
来并行化
My 2 cents:

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

使用
ForEach
只能限制最大级别

基本上,你可以强迫所有人使用更多的线程;可能重复的