C#-可以迭代GC堆吗?

C#-可以迭代GC堆吗?,c#,multithreading,garbage-collection,C#,Multithreading,Garbage Collection,我不确定以下问题是否正确。为了教育自己,我只是问 (1)我能否以编程方式迭代所有代的GC堆 (2)是否可以通过启动线程来观察GC如何在我的程序集上运行?对您的问题的回答是: 不幸的是,你不能。CLR的垃圾收集器以标记、扫描、压缩模式工作,因此在运行之间,没有任何关于堆的信息(堆的大小或当前生成的特定类型实例除外),允许您迭代其中的所有对象 监视GC的最佳方法是使用和监视(或记录)GC 我刚才在互联网上搜索同一个问题的答案,但我没有找到任何方法以编程方式迭代GC堆 如果您只需要出于调试目的查看此信

我不确定以下问题是否正确。为了教育自己,我只是问

(1)我能否以编程方式迭代所有代的GC堆


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

对您的问题的回答是:

  • 不幸的是,你不能。CLR的垃圾收集器以标记、扫描、压缩模式工作,因此在运行之间,没有任何关于堆的信息(堆的大小或当前生成的特定类型实例除外),允许您迭代其中的所有对象

  • 监视GC的最佳方法是使用和监视(或记录)GC


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


    如果您只需要出于调试目的查看此信息,则可以启动WinDbg并加载SOS扩展。比你能用的还多!dumpheap extension命令以准确查看GC堆上的对象。如果有的话,也可以使用dotTrace的内存分析模式。

    内存分析程序是一个非常方便的工具,用于了解内存中的对象。从哪里可以获得内存分析程序?如文档所述:“CLR事件探查器的主要功能是让您了解应用程序如何与托管垃圾收集堆交互。您可以研究的一些更重要的事情包括:谁在托管堆上分配什么。哪些对象保留在托管堆上。谁在抓东西。垃圾收集器在应用程序的整个生命周期中所做的事情。“--听起来像是你想要的。谢谢你谢谢:)非常感谢