Memory management WinDbg的替代品!转储堆类型?

Memory management WinDbg的替代品!转储堆类型?,memory-management,windbg,sos,Memory Management,Windbg,Sos,我收到了下面这句话!转储堆-统计 000007fee09d6960 441762 835293368 System.String 我想知道441762字符串的用途。做一个 !dumpheap -type System.String 我会列出所有的,还是我错了?我怎样才能分析其中的一些呢?您可以使用!dumpheap-strings以列出字符串。不幸的是,这没有提供对象引用。您可以将-min/-max与-type标志一起使用来指定大小,以将输出限制为特定大小的字符串 有一个非常有用的

我收到了下面这句话!转储堆-统计

000007fee09d6960   441762    835293368 System.String
我想知道441762字符串的用途。做一个

!dumpheap -type System.String

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

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


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

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

我正在调试的应用程序占用了1.41 gb内存(加上大约相同数量的虚拟内存),我正在试图找出原因。为字符串分配835MB对我来说是不正常的,我正在尝试找出所有字符串的用途。最小/最大值不就是对象大小而不是对象索引吗?(也就是说,我想查看对象#所有441762个对象中的100000到100100个)@jgauffin:在任何.NET应用程序中通常会看到很多字符串,但800+MB的字符串似乎太多了。您是否正在动态地构建XML/HTML/任何文档?是的,最小值/最大值用于指定大小。我有别的建议吗?没有,你没有别的建议。我在找其他东西,抱歉:)使用大量内存的应用程序是COM+应用程序(包含大量ServicedComponents的服务器应用程序)。它是从Windows服务调用的,返回数据集(大部分是非类型化的)。