Dot-Net
.net 垃圾收集器何時執行?
當我調試 .net 程式碼時,我如何知道垃圾收集器何時執行?
我不想控制垃圾收集器何時執行。我只希望能夠知道它何時執行。我有一些資源不足的程式碼。我知道資源沒有被使用;我想知道 GC 何時執行以釋放它們。
哦,我想到的資源是來自 Sql 連接池的連接,而不是記憶體:-)
您必須使用 .NET 4.0,早期版本不支持您要求的內容。
本質上,您在循環中呼叫 WaitForFullGCApproach 和 WaitForFullGCComplete 方法。WaitForFullGCApproach 會阻塞直到你看到 GC,WaitForFullGCComplete 會阻塞直到 GC 完成。
請仔細閱讀這篇文章。如果您使用此方法,那麼您有責任確保垃圾收集確實發生。如果你搞砸了,你可能會破壞 GC 並迅速耗盡記憶體。
一般來說,您不應該擔心或考慮 GC 何時執行。
垃圾收集器將根據需要在執行時選擇的不確定時間執行。
如果你想對 GC 進行更細粒度的控制(我不推薦,除非在非常特殊的情況下),你可以使用GC.AddMemoryPressure和GC.RemoveMemoryPressure。這些不會強制 GC 執行,而是暗示它除了 CLR 分配的託管記憶體之外還有其他記憶體在執行。這可能會導致它更頻繁地執行,如果您在本機程式碼中分配大塊記憶體,這可能會很有用。
沒有直接的 API 來跟踪 GC 執行。(例如,GC 類不包含任何通知垃圾回收發生的事件。)唯一直接知道具體何時執行 GC 的方法是使用分析 API。