18
ParallelEnumerable
有一個靜態成員AsParallel
。如果我有IEnumerable<T>
並且想要使用Parallel.ForEach
這是否意味着我應該始終使用AsParallel
?Parallel.ForEach是否需要AsParallel()
例如 這兩個都是正確的(一切都是平等的)?
沒有AsParallel
:
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)), f => list.Add(f));
或AsParallel
?
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)).AsParallel(), f => list.Add(f));
嗯...究竟是什麼parrallelizing枚舉?或者至少如何將這種平行化與任務授權分開? – dkackman 2010-02-16 02:04:31
@dkackman'.AsParallel()'在這種情況下爲並行執行計數,特別是'.SelectMany()'的並行版本。考慮一個擁有大量'Where'子句但沒有順序的枚舉,我們可以在儘可能多的內核中同時評估where子句,從而將下一個列舉到下一個可用線程,使其速度幾乎快了n倍。我們對該結果的處理也可以用相同的方式進行處理,或者在一個線程中同步,或者在可用的核心上傳播,那麼'Parallel.ForEach'或'.ForAll'部分是否合理? – 2010-02-16 07:09:34
這確實有道理。謝謝Nick。 – dkackman 2010-02-16 12:36:57