這裏是我的示例項目:在C#中使用AsParallel沒有好處?
Console.WriteLine("Elapsed time in milliseconds:");
swSingle.Start();
var numbers2 = Enumerable.Range(0, 100000000);
var singleResult = numbers2
.Where(i => i % 2 == 0)
.ToArray();
swSingle.Stop();
Console.WriteLine("Without AsParallel: {0}", swSingle.ElapsedMilliseconds);
swParallel.Start();
var numbers = Enumerable.Range(0, 100000000);
var parallelResult = numbers.AsParallel()
.Where(i => i % 2 == 0)
.ToArray();
swParallel.Stop();
Console.WriteLine("Using AsParallel: {0}", swParallel.ElapsedMilliseconds);
我(多核)系統的輸出是:
Elapsed time in milliseconds:
Without AsParallel: 1537
Using AsParallel: 2135
爲什麼鴕鳥政策我使用AsParallel已得到這個樣本 在時間上的優勢?更糟的是,似乎 會有很多開銷。
'i%2'的計算是一個太簡單的並行化用例。這需要更多的努力來管理任務並行,然後計算結果。 – fubo
更準確地說,'.AsParallel'並不是魔術般的塵埃,它使一切都變得更快。它有成本。你應該只使用它,然後利益大於成本。更準確地說,每個並行化都有一個小的開銷,在你的情況下,比計算本身要大得多。 – Aron
你可能想看看分區器。 _「[一般來說,範圍分區只有在代理的執行時間小到中等,並且源有大量元素,並且每個分區的總體工作大致相等時纔會更快](https:// msdn .microsoft.com/EN-US /庫/ dd997411.aspx)「_。即便如此,你的例子也是非常基本的 – MickyD