Dot-Net

.net 垃圾收集器何時執行?

  • April 23, 2015

當我調試 .net 程式碼時,我如何知道垃圾收集器何時執行?

我不想控制垃圾收集器何時執行。我只希望能夠知道它何時執行。我有一些資源不足的程式碼。我知道資源沒有被使用;我想知道 GC 何時執行以釋放它們。

哦,我想到的資源是來自 Sql 連接池的連接,而不是記憶體:-)

您必須使用 .NET 4.0,早期版本不支持您要求的內容。

本質上,您在循環中呼叫 WaitForFullGCApproach 和 WaitForFullGCComplete 方法。WaitForFullGCApproach 會阻塞直到你看到 GC,WaitForFullGCComplete 會阻塞直到 GC 完成。

請仔細閱讀這篇文章。如果您使用此方法,那麼您有責任確保垃圾收集確實發生。如果你搞砸了,你可能會破壞 GC 並迅速耗盡記憶體。

http://msdn.microsoft.com/en-us/library/cc713687.aspx

一般來說,您不應該擔心或考慮 GC 何時執行。

垃圾收集器將根據需要在執行時選擇的不確定時間執行。

如果你想對 GC 進行更細粒度的控制(我不推薦,除非在非常特殊的情況下),你可以使用GC.AddMemoryPressureGC.RemoveMemoryPressure。這些不會強制 GC 執行,而是暗示它除了 CLR 分配的託管記憶體之外還有其他記憶體在執行。這可能會導致它更頻繁地執行,如果您在本機程式碼中分配大塊記憶體,這可能會很有用。

沒有直接的 API 來跟踪 GC 執行。(例如,GC 類不包含任何通知垃圾回收發生的事件。)唯一直接知道具體何時執行 GC 的方法是使用分析 API

引用自:https://stackoverflow.com/questions/3088757