dumpheap -type MyObjectType
命令获取MyObjectType
的方法表。它在堆上显示三个对象。dumpheap -mt <method table address>
来获取地址。!gcroot <address>
命令查找对这些对象的引用,找不到任何内容!do <address>
,它提供了有关此对象的字段的详细信息等。如何找到引用或使用对象的线程?任何找到它的命令?
答案 0 :(得分:1)
没有简单的方法可以执行此操作,但您可以为每个线程运行!dso
(即~*!dso
)。这将告诉您每个线程引用哪些对象。为了帮助导航输出,我通常将其记录到文件中,并使用grep或体面的文本编辑器来搜索结果。
答案 1 :(得分:0)
您可能会尝试使用Microsoft's CLR Profiler来找出分配和访问对象的线程。我不确定!gcroot
是否显示等待终结器的对象,但CLR Profiler肯定会这样做。您的对象也可能根本没有从任何GC根引用,只是等待收集发生。如果在LOB堆中分配它可能需要相当长的时间。尝试强制几个GC(并查看gen0-2集合是否真的发生)并查看你的对象是否存活。