我创建了一个高内存利用率转储并使用!dumpheap -stat和!dumpheap -mt我得到了两个30 MB大字符串通用列表的地址。
我想了解更多有关这些列表的信息。它们包含的内容或使用它们的代码。
有没有办法找到它们?
0:000> !做2b370038 名称:System.Object [] MethodTable:71e240bc EEClass:71c0da54 大小:33554448(0x2000010)字节 数组:等级1,元素数量8388608,类型CLASS 元素类型:System.Collections.Generic.List`1 [[System.String,mscorlib]] 领域: 无
答案 0 :(得分:1)
要获取有关阵列实例的信息,可以使用带有!dumparray
标志的-details
命令。但是请注意,转储整个数组可能需要一段时间并输出大量文本。
要了解保持实例存活的内容,请使用!gcroot
命令。您可能还想查看sosex.dll中的!refs
命令。
sosex.dll也有一个!gcgen
命令,它可以告诉你实例的生成。 IIRC已将相应的命令添加到sos.dll的CLR 4.0版本中。
答案 1 :(得分:0)
我建议您尝试使用.Net Memory Profiler(http://memprofiler.com)来探索托管内存转储。它比windbg容易得多。一个很好的GUI,您可以使用它来搜索和探索参考图。您还可以查看实例的“字段”值。