我使用C#3.5和反應延長前4GC.Collect的和C#多線程
我的應用程序在多個地方調用GC.Collect的()(TPL支持在C#中的版本是的,我知道我應該不是手動調用這個方法,但至少這個問題請留下這一點)。在將多線程實現放入之前,它工作正常。在每個線程中調用GC.Collect(),以便在多線程上下文中調用它。
然後我使用任務來實現多線程,我發現應用程序運行一段時間後內存使用量增加,線程停止正常工作。我從多核心計算機上CPU使用率下降到單線程級別的情況聲明「線程停止正常工作」,而不是完全使用。
當我試圖解決這個問題時,我所做的唯一的事情就是將GC.Collect()調用註釋掉,這個改變使線程正常工作。我想關閉GC.Collect(),除非當我在我的應用程序中運行一些很大的東西時,如果沒有GC.Collect(),我會遇到OutOfMemory異常。這是我繼續打電話的原因。
現在任何人都可以解釋爲什麼在使用高內存的機器上的多線程上下文中調用GC.Collect()會導致多線程問題?這一點有沒有相關的理論?非常感謝你的答案。
這是一個快速而有見地的幫助。我會試一試。非常感謝你。 – Steve 2010-09-17 01:27:14