2012-07-02 2 views
2

Например, если я вижу, что некоторые из этих кучек довольно большие, мой следующий вопрос будет заключаться в том, кто их использует (собственный или управляемый код). Как я могу определить, какой родной кучи (! Heap -s) использует CLR для своей цели?Каким образом кучи CLR GC отображаются в нативные кучи?

ответ

1

CLR использует VirtualAlloc для выделения сегментов памяти, которые будут использоваться как управляемые кучи. Вы можете проверить сегменты, используя! Sos.eeheap -gc. ! sos.dumpheap -stat покажет вам, сколько памяти используют управляемые кучи, и какие типы объектов потребляют память.

0

В CLR не используются никакие нативные кучи. Используйте SOS и! DumpHeap, чтобы увидеть управляемые кучи.

Здесь link для поиска того, кто использует родной кучи.

У меня были хорошие результаты с DebugDiag 1.1 для поиска, кто использует ту или иную кучу.

Edit: Хотя 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) 
Смежные вопросы