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