0

我创建了一个高内存利用率转储并使用 !dumpheap -stat 和 !dumpheap -mt 我得到了两个 30 MB 的大字符串通用列表的地址。

我想了解更多关于这些列表的信息。它们包含什么或哪段代码正在使用它们。

有没有办法找到它们?

0:000>!do 2b370038 名称:System.Object [] MethodTable:71e240bc EEClass:71c0da54 大小:33554448(0x2000010)字节数组:排名 1,元素数 8388608,类型 CLASS 元素类型:System.Collections.Generic.List` 1[[System.String, mscorlib]] 字段:无

4

2 回答 2

1

要获取有关阵列实例的信息,您可以使用!dumparray带有-details标志的命令。但是请注意,转储整个数组可能需要一段时间并输出大量文本。

要找出使实例保持活动状态的原因,请使用该!gcroot命令。您可能还想查看!refssosex.dll 中的命令。

sosex.dll 也有一个!gcgen命令,它可以告诉你实例的生成。IIRC 已将相应的命令添加到 CLR 4.0 版本的 sos.dll 中。

于 2009-07-09T23:32:51.650 回答
0

我建议您尝试使用 .Net Memory Profiler ( http://memprofiler.com ) 来探索托管内存转储。它比windbg容易得多。一个不错的 GUI,可用于搜索和探索参考图。您还可以查看实例的字段值。

于 2009-06-24T03:24:58.543 回答