触发.NET垃圾收集外部(Triggering a .NET garbage collection

2019-09-16 12:30发布

有没有触发来自另一个进程或从内部的WinDBG一个.NET过程垃圾收集的方法吗?

有托管调试助手,迫使一个集合作为您在本机/托管边界移动, AQTime似乎有按钮表明它这样做,但我不能找到如何做的文档。

Answer 1:

嗯...有即时窗口。 如果您有连接到过程的奢侈品,我应该手动你可以GC.Collect的在即时窗口。

更大的问题:为什么你想手动诱发GC.Collect的? 这是一个坏习惯,并指示更大的设计问题。



Answer 2:

在回答另一个问题 :

基本上,使用PerfView :

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

它不是用于生产用途。



Answer 3:

约翰Cocktoastan的答案使用GC.Collect的时候在Visual Studio中是最好的选择,如果有。

我仍然无法找到一个替代实际做的WinDBG下的集合,但退后一步来的问题“多少内存是可回收的?” (见我对约翰的回答评论)我认为这是通过使用脚本(替代PowerDBG通过!DumpHeap和!GCRoot的某种组合?)搜索来查找无根手柄和总使用的空间(基本模拟算法在GC会做使用调试器)。 但是,由于这种思想,我还没有这些缺陷使没有试图编写代码来做到这一点的一个。



Answer 4:

如果通过Remoting公开的函数/对象,这可能是很容易做到。



文章来源: Triggering a .NET garbage collection externally