也許這是我,但我想知道這種(奇怪的)行爲。爲什麼GC未收集未引用的對象?
考慮下面的代碼片段,這是用於說明效果的最小控制檯程序。
class MyClass { }
class Program
{
static void Main(string[] args)
{
var x = new MyClass();
var y = new MyClass();
x = null;
GC.Collect();
Console.ReadKey();
}
}
當程序暫停對一個按鍵(或也通過放置一個斷點),存儲器探查表明仍有引用兩個「MyClass的」實例。
GC.Collect()
沒有幫助,也沒有將程序作爲「發佈」運行。
應該儘快收集未引用的MyClass
實例,至少通過強制GC收集?
注意:較大的控制檯應用程序涉及一堆產生數據的線程,而MyClass類實例充當消費者。這些實例通過WeakReference
引用,但似乎這不是問題。問題是我無法通過在Main方法中運行我的所有測試生命週期來垃圾消費者。
在此先感謝。
您是否嘗試過使用'GC.WaitForFullGCComplete();'? GC可能以非阻塞模式異步運行 – 2013-03-22 11:27:34
和'GC.WaitForPendingFinalizers()' – 2013-03-22 11:28:58
對於你們,我嘗試了很多GC模式,包括建議的Collect-WaitForPendingFinalizers-Collect,但沒有任何結果。 如果有人可以嘗試相同的話,我很樂意,因爲我正在認真思考我的平臺上的一些問題...... – 2013-03-22 11:34:16