使用Parallel.ForEach()
時,有沒有辦法保證訂單?我正在循環的集合需要維護它的順序,但我正在尋找一些性能改進。Parallel.Foreach維護收集訂單嗎?
回答
不,ForEach僅用於訂單無關緊要的條件;嘗試Parallel.For
將Parallel.For維護我的收藏的順序? – 2010-11-09 16:48:30
我想我應該問你要維護的是什麼 - 是不是像詹姆斯布萊克說的,你想處理IEnumerable中的項目?還是你想要確保進入的內容以相同的順序返回?如果是後者,那麼他們應該沒問題,不管是for還是foreach。如果它是前者,那麼你可能不想使用並行功能,因爲對這些項目進行操作會損害並行操作的收益。 – CodeMonkey1313 2010-11-09 16:58:58
我正在使用我的foreach中的StringBuilder.WriteLine(),創建一排數據已經排序 – 2010-11-09 17:16:23
所以你有一個看起來像這樣的聲明? (根據您的意見)。
Parallel.Foreach(myData, ..., (d) =>
{
StringBuilder sb = new StringBuilder();
sb.Append(d);
// WriteLine sb?
});
這種方法有很多問題。
- 無論
Parallel.For
或Parallel.ForEach
將保證你到myData
內容訪問任何特定的順序進行訪問。 - 如果你在控制檯或方法的共享
StringBuilder
要麼輸出結果,或建立一個完整的字符串,那麼你 很可能阻塞共享資源,有效地序列化 部分的並行循環。
如果沒有看到您的代碼的具體示例很難說更多。根據你在做什麼,你可能可以在PLINQ中使用保存命令AsOrdered()
來獲得你想要的位置。
見this MSDN Resource和 Ordered PLINQ ForAll
這將允許你返回一個有序的結果集,根據輸入的命令,但不機制保障實際處理的順序上。 但是,如果並行查詢阻塞了正文中的呼叫,則您不太可能獲得良好的性能。
任何人尋找一個簡單的解決辦法,我已經發布(使用PLINQ使用Parallel.ForEach
一加一)2種擴展方法作爲對以下問題的答案的一部分:
- 1. 維護訂單的鍵/值集合
- 2. Tensorflow:批量維護訂單
- 3. BCP維護插入訂單
- 4. Bigcartel收集訂單
- 5. 維護排序(由參數INT)收集
- 6. 維護廣告訂單的併發集合
- 7. 在R中維護原始訂單
- 8. 如何維護訂單優先級
- 9. 在Tkinter堆疊訂單維護
- 10. DownloadStringAsync維護訂單的多個URL
- 11. 架構:維護訂單歷史
- 12. 通過搜索維護訂單
- 13. DB架構:維護項目訂單
- 14. Dojo訂單和收集
- 15. Sphinxsearch維護sql的訂購
- 16. 維護Cassandra集羣
- 17. 如何從Parallel.ForEach收集返回值?
- 18. 維護單位
- 19. 收集訂單<span> -elements
- 20. LINQ:通過組計數收集訂單
- 21. Java按不同參數收集訂單
- 22. 嵌套集模型維護
- 23. 維護Backbone集合參考
- 24. Parallel.ForEach塊嗎?
- 25. hyperdex仍在維護中嗎?
- 26. 維護訂購的列表實現
- 27. RabbitMQ:維護訂戶的「目錄」
- 28. 如何使用UUID維護廣告訂單
- 29. 如何從data.frame創建列表後維護訂單
- 30. 如何在DataGrid的SelectedItems中維護訂單?
你是什麼意思「擔保訂單」?例如,如果您有5個線程,並且項目3在項目4之前完成,則線程3將從項目6開始,並且隨着此過程的進行,您對訂單不確定。這是你想解決的問題嗎? – 2010-11-09 16:45:37