有没有办法从另一个进程或WinDBG内部触发.NET进程中的垃圾回收?
当您跨越本机/托管边界时,有一些托管调试助手会强制收集,而AQTime似乎有一个按钮,表明它会这样做,但我找不到任何关于如何进行的文档做到这一点。
答案 0 :(得分:11)
嗯......就在眼前。如果您可以轻松附加到该过程,我认为您可以在即时窗口中手动GC.Collect。
更大的问题:为什么要手动诱导GC.Collect?这是一个讨厌的习惯,并且表明设计问题要大得多。
答案 1 :(得分:10)
答案 2 :(得分:2)
John Cocktoastan在Visual Studio中使用GC.Collect的答案是最佳选择。
我仍然找不到在WinDBG下实际进行收集的替代方法,但又回到了“可回收多少内存?”的问题。 (请参阅我对John的回答的评论)我认为通过使用!DumpHeap和!GCRoot的某些组合使用脚本化(PowerDBG?)搜索可以找到非根源句柄和总空间(基本上)模拟GC使用调试器执行的算法)。但是考虑到这一点,我没有遇到过这些错误之一,所以没有尝试编写代码来实现它。
答案 3 :(得分:0)
如果通过远程处理公开函数/对象,可以很容易地完成。