Dot-Net

從外部觸發 .NET 垃圾回收

  • September 19, 2008

有沒有辦法從另一個程序或 WinDBG 內部觸發 .NET 程序中的垃圾收集?

當您跨過本機/託管邊界時,有託管調試助手會強制收集,並且AQTime似乎有按鈕建議它這樣做,但我找不到任何有關如何執行此操作的文件。

John Cocktoastan 在 Visual Studio 中使用 GC.Collect 的答案是最好的選擇。

我仍然找不到在 WinDBG 下實際進行收集的替代方法,但退後一步回到“可回收多少記憶體?”的問題。(請參閱我對約翰的回答的評論)我認為有一種替代方法是通過 !DumpHeap 和 !GCRoot 的某種組合使用腳本( PowerDBG ?)搜尋來查找無根句柄並總計使用的空間(基本上模擬算法GC 會使用調試器)。但是自從想到這一點以來,我還沒有遇到這些錯誤之一,因此沒有嘗試編寫程式碼來做到這一點。

另一個問題中回答:

基本上,使用PerfView

PerfView.exe ForceGC [ProcessName | Process ID] /AcceptEULA

它不適用於生產用途。

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