从外部触发.NET垃圾回收

时间:2008-09-19 11:29:04

标签: .net debugging garbage-collection windbg

有没有办法从另一个进程或WinDBG内部触发.NET进程中的垃圾回收?

当您跨越本机/托管边界时,有一些托管调试助手会强制收集,而AQTime似乎有一个按钮,表明它会这样做,但我找不到任何关于如何进行的文档做到这一点。

4 个答案:

答案 0 :(得分:11)

嗯......就在眼前。如果您可以轻松附加到该过程,我认为您可以在即时窗口中手动GC.Collect。

更大的问题:为什么要手动诱导GC.Collect?这是一个讨厌的习惯,并且表明设计问题要大得多。

答案 1 :(得分:10)

another question回答:

基本上,使用PerfView

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

它不适合生产使用。

答案 2 :(得分:2)

John Cocktoastan在Visual Studio中使用GC.Collect的答案是最佳选择。

我仍然找不到在WinDBG下实际进行收集的替代方法,但又回到了“可回收多少内存?”的问题。 (请参阅我对John的回答的评论)我认为通过使用!DumpHeap和!GCRoot的某些组合使用脚本化(PowerDBG?)搜索可以找到非根源句柄和总空间(基本上)模拟GC使用调试器执行的算法)。但是考虑到这一点,我没有遇到过这些错误之一,所以没有尝试编写代码来实现它。

答案 3 :(得分:0)

如果通过远程处理公开函数/对象,可以很容易地完成。