【问题标题】:WinDbg alternative to !dumpheap -type?WinDbg 替代 !dumpheap 类型?
【发布时间】:2010-10-05 13:18:45
【问题描述】:

我从 !dumpheap -stat 得到以下行

000007fee09d6960   441762    835293368 System.String

我很想知道 441 762 字符串的用途。做一个

!dumpheap -type System.String

会列出所有,还是我弄错了?我怎样才能只分析其中的一些?

【问题讨论】:

    标签: memory-management windbg sos


    【解决方案1】:

    您可以使用!dumpheap -strings 列出字符串。不幸的是,这并没有给你对象引用。您可以使用 -min/-max-type 标志来指定大小以将输出限制为特定大小的字符串。

    SOSEX.dll 有一个非常有用的!strings 命令,它列出了对象引用和文本,因此很容易找到特定的字符串。它具有内置过滤功能,并且还支持最小和最大长度选项。

    【讨论】:

    • 我正在调试的应用程序占用了 1.41 GB 内存(加上大约相同数量的虚拟内存),我正试图找出原因。为字符串分配 835Mbs 对我来说似乎并不正常,我正试图弄清楚所有字符串的用途。
    • Ins't min/max 只是对象大小而不是对象索引? (即我想查看所有 441762 个对象中的 #100000 到 100100 对象)
    • @jgauffin:您通常会在任何 .NET 应用程序中看到很多字符串,但是 800+ MB 的字符串似乎太多了。您是否正在动态构建 XML/HTML/任何文档?
    • 是的,最小/最大用于指定大小。我在其他地方建议过吗?
    • 不,您没有提出任何其他建议。我在寻找别的东西,抱歉 :) 使用大量内存的应用程序是 COM+ 应用程序(具有大量 ServicedComponents 的服务器应用程序)。它从 Windows 服务调用并返回数据集(大部分是无类型的)。​​
    【解决方案2】:

    如果你使用 psscor2,你可以为 !dumpheap 使用 -random 参数

    【讨论】:

      猜你喜欢
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多