【发布时间】:2013-12-28 06:13:31
【问题描述】:
我的问题是dumpheap -stat 返回了大量的对象,我不知道哪些是有根的,哪些不是。
好吧,如果我在单个地址上运行 !mroot 或 !refs 命令,我可以,但这种方法不能很好地扩展到 dumpheap 报告的数千个对象。
例如,dumpheap -stat 包含以下行:
000007fef3d14088 74247 2375904 Microsoft.Internal.ReadLock
哇,74,247 个实例。但是,运行
.logopen c:\tmp\2\log.txt;.foreach (entry {!dumpheap -type Microsoft.Internal.ReadLock -short}){!refs ${entry} -target};.logclose
表明DumpHeap 报告的每个实例实际上都是未回收的垃圾!
我如何发现每个实例都是垃圾是另一个问题。我必须将所有NONE 字符串提取到一个文件中,并将所有Objects referencing 字符串提取到另一个文件中,然后比较每个文件中的行数。当然有更好的方法:-(。
无论如何,我想知道如何只关注根对象。理想情况下,我希望获得此类对象的统计信息和详细信息。
【问题讨论】:
-
我的建议是给 Steve Johnson(SOSEX 的作者)写一封电子邮件,询问 !refs 和 !mroot 上的 -short 选项,类似于 !dumpheap -short,以便可以在进一步处理中使用它。
标签: debugging windbg sos sosex