我有一個巨大的集合,我想以並行方式處理每個對象。做同步通常涉及一個簡單的「foreach」。想知道在我的場景中使用什麼,即Parallel.ForEach或MyCollection.AsParallel()。ForAll()。Parallel.ForEach vs AsParallel()。ForAll
您能否介紹一下使用這種方法的好處?
我有一個巨大的集合,我想以並行方式處理每個對象。做同步通常涉及一個簡單的「foreach」。想知道在我的場景中使用什麼,即Parallel.ForEach或MyCollection.AsParallel()。ForAll()。Parallel.ForEach vs AsParallel()。ForAll
您能否介紹一下使用這種方法的好處?
我看到它的方式,如果您只想並行化foreach
,則應使用其並行版本,即Parallel.ForEach()
。
ParallelEnumerable.ForAll()
適用於具有LINQ查詢後跟foreach
的特定情況,並且您希望將它們並行化。因此,您所做的是通過添加AsParallel()
並行化LINQ查詢,然後通過將其更改爲ForAll()
來並行化foreach
。
時間和挑選贏家。
我發現Parallel.ForEach在最令人愉快的並行場景中執行得更好。看起來它使用更先進的工作平衡模式。 PLINQ主要是爲了平行查詢。
您可以選擇使用AsParallel()。AsOrdered()對元素進行排序。 Order.in Parallel.ForEach不是開箱即用,我們需要做到這一點。
我的2美分:
隨着ForAll
可以使用WithDegreeOfParallelism
擴展方法指定並行的期望水平。
With ForEach
您只能限制最高級別。
基本上,你可以強制ForAll
使用更多的線程。
這似乎相關; http://stackoverflow.com/questions/2270097/does-parallel-foreach-require-asparallel?rq=1 – Patrick
可能的重複[使用.AsParallel()併發化任務.ForAll或Parallel.ForEach性能問題](http: //stackoverflow.com/questions/8415998/parallelizing-a-task-using-asparallel-forall-or-parallel-foreach-performance) – Patrick