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 に答える