使用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. Bigcartel收集訂單
- 4. 在Tkinter堆疊訂單維護
- 5. 通過get-member維護財產訂單
- 6. 如何維護訂單優先級
- 7. 通過搜索維護訂單
- 8. 架構:維護訂單歷史
- 9. DB架構:維護項目訂單
- 10. 維護Cassandra集羣
- 11. 維護單位
- 12. 收集訂單<span> -elements
- 13. LINQ:通過組計數收集訂單
- 14. Parallel.ForEach塊嗎?
- 15. 嵌套集模型維護
- 16. hyperdex仍在維護中嗎?
- 17. RabbitMQ:維護訂戶的「目錄」
- 18. 通過兩個按查詢排序的聯合維護訂單
- 19. C3堆疊圖表維護數據訂單
- 20. JPA EclipseLink - 通過主鍵維護訂單獲取多個對象
- 21. 訂閱Meteor.users收集更新
- 22. 保持收集訂購
- 23. 可維護單元測試
- 24. 維護子菜單可見
- 25. 有效維護名單
- 26. 限價訂單簿:維護買入/賣出定單列表的數據結構
- 27. 力Parallel.ForEach使每個項目一個線程收集
- 28. parallel.foreach和字典集合
- 29. parallel.foreach與自定義集合
- 30. 將單詞從文件讀入集合,維護順序
你是什麼意思「擔保訂單」?例如,如果您有5個線程,並且項目3在項目4之前完成,則線程3將從項目6開始,並且隨着此過程的進行,您對訂單不確定。這是你想解決的問題嗎? – 2010-11-09 16:45:37