2

例如,如果我看到其中一些堆非常大,我的下一个问题将是谁(本机或托管代码)使用它们。如何确定 CLR 用于其目的的本机堆 (!heap -s)?

4

2 回答 2

1

CLR 使用 VirtualAlloc 分配要用作托管堆的内存段。您可以使用 !sos.eeheap -gc 检查这些段。!sos.dumpheap -stat 将显示托管堆正在使用多少内存,以及哪些类型的对象正在消耗内存。

于 2012-07-03T16:34:49.740 回答
0

CLR 不使用任何本机堆。使用 SOS 和 !DumpHeap 查看托管堆。

这是查找谁在使用本机堆的链接

我使用DebugDiag 1.1获得了一些很好的结果,用于查找谁在使用哪个本机堆。

编辑:虽然VirtualAlloc用于为本机堆分配内存,但 !CLRUsage 显示还使用了本机堆。但是我不知道目的。

0:000> !CLRUsage
Native Heap for mscorwks: 0x07e60000
Number of GC Heaps: 1
------------------------------
GC Heap Size  0xbc7dd4(12,352,980)
Total Commit Size  00e22000 (14 MB)
Total Reserved Size  0225e000 (34 MB)
Initial reservation type: All at once
Initial Allocation Size: 2000000 (33,554,432) (32 MB)
Reserved Memory Size: 3000000 (50,331,648) (48 MB)
Reserved Memory Limit Size: 3000000 (50,331,648) (48 MB)
于 2012-07-03T09:06:38.983 回答