我不确定以下问题是否有效。要教育自己,我只是在问。
(1)我可以以编程方式迭代所有代的GC堆吗?
(2)是否可以通过启动线程观察GC如何对我的装配体进行操作?
答案 0 :(得分:7)
你的问题答案是:
不幸的是,你不能。 CLR的垃圾收集器以标记,扫描,紧凑模式工作,因此在运行之间没有关于堆的信息(除了堆的大小或特定类型实例的当前生成),这将允许您迭代所有对象它
监控GC的最佳方法是使用perfmon
并观察(或记录)CLR memory counters。
答案 1 :(得分:2)
我刚才在网上搜索同一个问题的答案,但我没有找到任何方法以编程方式迭代GC堆。
如果您只是需要查看此信息以进行调试,可以启动WinDbg并加载SOS扩展。您可以使用!dumpheap extension命令查看GC堆上的确切对象。你也可以使用dotTrace的内存分析模式。