【问题标题】:Object count is off by a factor of 2对象计数减少了 2 倍
【发布时间】:2018-09-08 21:56:41
【问题描述】:

我有一个 dotMemory 分析会话,但我无法找到内存泄漏,所以我执行了以下操作:

  1. 启动 dotMemory 会话
  2. 附加 WinDbg 并进入进程
  3. 在 dotMemory 中拍摄快照
  4. 让进程继续 (g) 以便 dotMemory 可以使用 snapshop
  5. 拍摄快照后,再次进入进程

如果应用程序处于空闲状态,即什么都不做(嗯,它运行消息泵),我应该得到相同的结果。

查看 dotMemory 快照中的对象,我可以看到 88000 个 JProperty 类型的对象:

然而,在 WinDbg 中,我看到了双倍数量的对象:

0:021> !dumpheap -stat -type JProperty
Statistics:
              MT    Count    TotalSize Class Name
000007fe7d3a3c28    83930      3357200 Newtonsoft.Json.Linq.JPropertyKeyedCollection
000007fe7d3a4ef0   177104      4250496 Newtonsoft.Json.Linq.JProperty+JPropertyList
000007fe7d3a4b80   177104     18418816 Newtonsoft.Json.Linq.JProperty
Total 438138 objects

谁错了 - 还是将调试器与 dotMemory 一起使用是一个已知问题?

我在 Windows 7 上使用 dotMemory 2018.1.4 和 WinDbg 10.0.15063,调试 x64 程序,如果有任何问题的话。

【问题讨论】:

    标签: windbg dotmemory


    【解决方案1】:

    看起来这是 dotMemory 2018.1.4 中的错误。由于某些原因,我没有自动获得更新。我现在已经更新到 2018.2.1 版本并且对象数是相同的。

    我尝试在their bug tracker 中查找问题,但没有找到。

    【讨论】:

    • 我知道另一个可以解释的原因,dotMemory 不显示 Profiling API 报告的对象,但无法从任何根访问(是的,有时 GC 会留下一些对象无法从内存和 MS Profiling 的根访问API 报告它们)。你能在 WinDbg 中看到从根可到达的对象数量吗?
    猜你喜欢
    • 2019-03-26
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 2017-05-09
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    相关资源
    最近更新 更多