3

我正在研究 SOS 命令及其输出,但我注意到似乎没有办法以某种方式获取当前正在使用的所有类型。到目前为止最好的方法是!dumpheap -stat,但它只列出有实例的类型。但是,当 ValueType 从未被装箱时,该类型将不会显示在!dumpheap -stat. (这并不奇怪,因为它们不是在堆上分配的。)

所以我的问题是:是否有任何有效的方法来确定当前存在哪些附加值类型?我的意思是,我可以在检查单个堆对象时按需加载它们(例如!dumpvc <mt> <address>基于!do <address>输出),但是对于显示的统计信息,通过一些比查看(实例/类定义)更简单的方法来查找类型会更好已知的类来确定它们是否使用任何额外的 ValueType。

4

1 回答 1

0

似乎没有任何有效的方法可以做到这一点。换句话说,我最终检查了!DumpHeap -stat返回的每种类型是结构数组还是包含结构字段。在这两种情况下,我都需要递归检查新找到的结构类型是否也包含任何结构字段。在这种情况下需要递归,除非我已经看到了结构类型。

!DumpModule -mt不是选项,顺便说一句。例如,我看到System.Collections.Generic.List`1了,但没有任何东西可以代表例如 List 类。

于 2012-06-22T05:23:18.947 回答