C# - 是否可以迭代GC堆?

时间:2009-09-22 19:54:24

标签: c# multithreading garbage-collection

我不确定以下问题是否有效。要教育自己,我只是在问。

(1)我可以以编程方式迭代所有代的GC堆吗?

(2)是否可以通过启动线程观察GC如何对我的装配体进行操作?

2 个答案:

答案 0 :(得分:7)

你的问题答案是:

  1. 不幸的是,你不能。 CLR的垃圾收集器以标记,扫描,紧凑模式工作,因此在运行之间没有关于堆的信息(除了堆的大小或特定类型实例的当前生成),这将允许您迭代所有对象它

  2. 监控GC的最佳方法是使用perfmon并观察(或记录)CLR memory counters

答案 1 :(得分:2)

我刚才在网上搜索同一个问题的答案,但我没有找到任何方法以编程方式迭代GC堆。

如果您只是需要查看此信息以进行调试,可以启动WinDbg并加载SOS扩展。您可以使用!dumpheap extension命令查看GC堆上的确切对象。你也可以使用dotTrace的内存分析模式。