有没有办法从另一个进程或从WinDBG内部触发.NET进程中的垃圾回收呢?
有托管调试助手可在跨越本机/托管代码边界时强制进行垃圾回收,AQTime似乎有一个按钮可以执行此操作,但我找不到任何关于如何执行此操作的文档。
有没有办法从另一个进程或从WinDBG内部触发.NET进程中的垃圾回收呢?
有托管调试助手可在跨越本机/托管代码边界时强制进行垃圾回收,AQTime似乎有一个按钮可以执行此操作,但我找不到任何关于如何执行此操作的文档。
好的...有立即窗口。如果你有附加到进程的奢侈条件,我认为你可以在立即窗口中手动调用GC.Collect。
更大的问题是:为什么要手动引发GC.Collect?这是一种不良习惯,并表明存在更大的设计问题。
John Cocktoastan提出在Visual Studio中使用GC.Collect是最佳选择,如果有的话。
我仍然找不到在WinDBG下实际进行收集的替代方案,但是退一步考虑“可回收内存量有多少?”(请参见我对John答案的评论),我认为可以通过使用脚本(PowerDBG?)搜索一些组合以查找非根处理程序并总结使用的空间(基本上使用调试器模拟GC将要执行的算法)。 但是自从想到这个想法以来,我就没有遇到过这些错误,因此还没有尝试编写代码来执行它。