27

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

当您跨过本机/托管边界时,有托管调试助手会强制收集,并且AQTime似乎有按钮建议它这样做,但我找不到任何有关如何执行此操作的文档。

4

4 回答 4

19

另一个问题中回答:

基本上,使用PerfView

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

它不适用于生产用途。

于 2016-02-02T16:44:23.757 回答
10

嗯...有即时窗口。如果您有幸附加到该过程,我想您可以在即时窗口中手动 GC.Collect。

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

于 2008-09-19T12:57:38.760 回答
3

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

我仍然找不到在 WinDBG 下实际进行收集的替代方法,但退后一步回到“可回收多少内存?”的问题。(请参阅我对约翰的回答的评论)我认为有一种替代方法是通过 !DumpHeap 和 !GCRoot 的某种组合使用脚本( PowerDBG ?)搜索来查找无根句柄并总计使用的空间(基本上模拟算法GC 会使用调试器)。但是自从想到这一点以来,我还没有遇到这些错误之一,因此没有尝试编写代码来做到这一点。

于 2009-08-28T21:47:37.430 回答
0

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

于 2008-09-19T11:30:26.577 回答