我的托管进程的GC堆转储显示,除了其他类型之外,还有大量的字符串对象。
我把它们中的几个归为一类:
> dumpheap -type System.String
> !do <address>
告诉我字符串的内容是什么,除此之外我还不感兴趣。
所以,我跟着字符串到GC根。但首先,我想确认这是在LOH。
> !gcwhere <address>
> !gcroot <address>
现在这就是我能得到的。
我想知道在哪里(哪行代码创建了它,最好是!该行的dumpil)以及创建它的方法的方法描述,该方法的声明类型,程序集和加载程序集的app域。
答案 0 :(得分:1)
.NET框架不需要运行应用程序的信息,因此它不会存储它。还没有类似于激活此类存储的GFlags +ust
设置的标志。你现在拥有的工具(转储文件或实时调试)是不可能的。
您需要一个内存分析器,如ANTS memory profiler或JetBrains dotMemory。即使那些默认情况下也不会收集分配数据,您必须激活它。
dotMemory的截图: