Parallel.ForEach 和 Task.Factory.StartNew:平行程式設計的比較分析
對集合進行並行操作時,Parallel.ForEach
和 Task.Factory.StartNew
是常見的選擇。兩者都利用線程池,但它們的方法存在顯著差異,從而影響效能。
Parallel.ForEach:最佳化批次
Parallel.ForEach
使用 Partitioner<T>
有效地將集合分成更小的、可管理的區塊。這種批次避免了為每個單獨的專案建立任務,從而最大限度地減少了開銷。
Task.Factory.StartNew:每個專案一個任務
與Parallel.ForEach
不同,Task.Factory.StartNew
為集合中的每個項目建立一個單獨的任務。 雖然看似簡單,但這會導致大量開銷,尤其是對於大型資料集,從而導致執行時間變慢。
使用 Parallel.ForEach 進行效能調優
Parallel.ForEach
透過可自訂的分區器提供卓越的控制,從而為不同的場景提供最佳化的效能。
同步與非同步執行
一個關鍵的運行時差異在於它們的執行模型:Parallel.ForEach
同步執行,而 Task.Factory.StartNew
非同步操作。 若要將 Parallel.ForEach
分割器的效率與異步步行為結合,請使用以下模式:
<code class="language-csharp">Task.Factory.StartNew( () => Parallel.ForEach<Item>(items, item => DoSomething(item)));</code>
這種方法保留了批次的優點,同時允許非同步操作。
以上是Parallel.ForEach 或 Task.Factory.StartNew:哪個更適合併行處理?的詳細內容。更多資訊請關注PHP中文網其他相關文章!