0

.NETメモリ管理でこのような大きなオブジェクトヒープが作成されるのはなぜですか?そのほとんどは空であるようです。これは何か心配していますか?ラージオブジェクトヒープは、ほとんど空であるのはなぜですか?

実際に私のアプリケーションでは179 MB相当の大きなオブジェクトしかないということですか? 1171428792(Heap0 LOH)から983396616(無料LOH)を差し引くことにより、179 MBが到着しました。

以下の情報は、w3wp.exeつまりASP.NETプロセスで作成されたダンプファイルでWinDbgを使用して収集されました。このプロセスは、Windows 2008の64ビットオペレーティングシステムでホストされています。アプリケーションは、「FREE」という名前のオブジェクトの合計バイト値の ルック-stat!DumpHeapを実行している3.

0:025> !HeapStat 
Heap    Gen0   Gen1   Gen2   LOH 
Heap0   4628496  3840808 319586376 1171428792 

Free space:             Percentage 
Heap0    24   24  1926224 983396616SOH: 0% LOH: 83% 

答えて

0

私は示唆しているのMicrosoft .NET Framework 4.0とASP.NET MVCを使用して構築されています。これらは、利用可能なLOHのフリーブロックですが、ラージオブジェクトヒープをスラッシングして断片化しています。この数値が近ければ、短命のオブジェクトがたくさんあり、空きメモリの断片を残してLOHを打つことになります(このヒープは決して圧縮されません)。

0

LOHがコミットされたかどうかは確かですか?それとも予約済みのアドレススペースですか?

ここでは、PowerShell.exeインスタンスをSysinternalのVMマップで見てきました。これは〜390MBの合計GCヒープを示しますが、2つの最大ブロック(〜240MBと〜125MB)は予約されています。 20MB未満がコミットされています(物理メモリまたはページファイル領域が割り当てられています)。

これを再実行するには、合計プロセスコミットが〜200MBで、GCヒープに割り当てられたアドレススペースより小さい。

+0

ダンプファイルからこのデータを取得できますか? –

+0

@Dhwanil可能性があります。それは完全な対ミニダンプに依存するかもしれません、そしておそらくダンプファイルのVSではなくWinDbgを使用する必要があります。実行時にVMマップを使いやすくしました:-) – Richard

関連する問題