2009-09-22 80 views
5

我不确定下列问题是否有效。为了教育自己,我只是问。 (1)我可以以编程方式迭代所有世代的GC堆堆栈吗?C# - 是否有可能迭代GC堆?

(2)是否可以通过启动线程来观察GC如何在我的程序集上运行?

+1

内存分析器是一个非常方便的工具,用于了解内存中的对象。 –

+0

我在哪里可以得到内存分析器? – user160677

+0

http://msdn.microsoft.com/en-us/library/ms979205.aspx –

回答

7

你问题的答案是:

  1. 不,你不能可惜。 CLR的垃圾收集器以标记,扫描和压缩模式工作,所以在运行之间,没有关于堆的信息(堆的大小或特定类型实例的当前代码除外),这将允许您迭代所有对象它。

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

+0

+1用于perfmon和CLR内存计数器。 – RichardOD

+0

谢谢你的信息。 – user160677

+0

其实你可以))https://github.com/mumusan/dotnetex/ – Alexus

2

前段时间我在网上搜索一个相同的问题的答案,但我没有找到任何方式来迭代GC堆编程。

如果您只是为了调试目的而需要查看此信息,则可以启动WinDbg并加载SOS扩展。您可以使用!dumpheap扩展命令精确查看GC堆上的对象。如果有的话,也可以使用dotTrace的内存分析模式。

+0

谢谢谢谢:)非常感谢 – user160677

相关问题