我使用LINQ到對象,我發現.ToList和.ToArray操作阻塞了線程。 (在性能報告中,我看到了阻塞的時間。)我想這是因爲GC在嘗試調用tolist或toarray時試圖分配內存。這很糟糕,因爲我在並行循環中使用linq,並且希望訪問linq中的一些共享集合。 有沒有辦法解決這個問題,除非不使用linq來反對?會LINQ到對象阻塞線程?
回答
調用ToList
或ToArray
會導致查詢立即得到評估 - 這將阻止它們被調用的線程,直到整個集合被評估並返回查詢結果。
您應該直接迭代查詢而不調用任何一種方法 - 這會將結果以流的形式(假設沒有其他渴望的評估發生)。
我建議你看看Task Parallel Library(TPL)如果你需要做同時工作。
謝謝。我按照你的建議進行迭代。現在爭用時間將變爲:-System.Linq.Enumerable.WhereSelectEnumerableIterator'2.MoveNext() --ConsoleApplication3.Module1._Lambda $ __ 7(class VB $ AnonymousType_0'2
最後我得到了答案。我需要做的唯一事情就是將GC轉換爲服務器模式。 – orange
- 1. linq是否阻塞線程?
- 2. 阻止阻塞的線程阻塞
- 3. UI線程阻塞調用COM對象的後臺線程
- 4. 阻塞隊列不阻塞線程?
- 5. MessageBeep線程阻塞
- 6. 阻塞線程 - Java
- 7. 非阻塞線程
- 8. Java線程阻塞
- 9. 更新tableView不會阻塞主線程
- 10. OpenAL:alSourcePlay()會阻塞當前線程嗎?
- 11. NSTImer事件會阻塞主線程嗎?
- 12. 將線程阻塞轉換爲f中的非線程阻塞#
- 13. STA線程模式線程也會阻塞winform UI線程?
- 14. 網絡阻塞到非阻塞,只有線程作爲選項?
- 15. 阻塞的線程是否會導致進程阻塞?爲什麼和如何?
- 16. Nacl_IO阻塞線程,直到fopen完成
- 17. 找到該模塊阻塞UI線程
- 18. UI線程被阻塞
- 19. Netty線程被阻塞
- 20. Spring ObjectPooling&線程阻塞
- 21. 隊列阻塞主線程
- 22. 沒有阻塞線程
- 23. ConnectAsync阻塞UI線程
- 24. Java selector.select()阻塞線程?
- 25. Multitheading阻塞工作線程
- 26. C#線程與阻塞
- 27. 中止阻塞線程
- 28. SmartThreadPool阻塞UI線程
- 29. MaxDegreeOfParallelism阻塞主線程?
- 30. 在.Net中阻塞線程
你有什麼具體的具體例子嗎?特別是通過線程理解,細節非常重要。 –
另請參見:數據有多大 –
'我在並行循環中使用linq':你的意思是說你正在使用PLinq? – phoog