たとえば、これらのヒープのいくつかがかなり大きいことがわかった場合、次の質問は、誰が(ネイティブコードまたはマネージコード)それらを使用するかということです。CLRがその目的に使用するネイティブヒープ(!heap -s)をどのように把握できますか?
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 に答える