0

.NET メモリ管理がこのような大きなオブジェクト ヒープを作成するのはなぜですか? ほとんどが空っぽのようです。これは気にする必要がありますか?

以下のデータは、実際にはアプリケーション内に 179 MB 相当のラージ オブジェクトしかないことを意味しますか? 1171428792 (Heap0 LOH) から 983396616 (フリー LOH) を引くと、179 MB になります。

以下の情報は、w3wp.exe、つまり ASP.NET プロセスで作成されたダンプ ファイルで WinDbg を使用して収集されました。このプロセスは、Windows 2008 64 ビット オペレーティング システムでホストされています。このアプリケーションは、Microsoft .NET Framework 4.0 および ASP.NET MVC 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%
4

2 に答える 2

0

LOH の大部分がコミットされていると確信していますか?それともアドレス空間が予約されているだけですか?

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

これを強化するために、合計プロセス コミットは ~200MB であり、GC ヒープに割り当てられたアドレス空間よりも少なくなります。

于 2011-07-28T15:14:33.967 に答える
0

!DumpHeap -stat を実行することをお勧めします。「FREE」という名前のオブジェクトの合計バイト値を探します。これらは LOH 内のフリー ブロックで使用できますが、Large Object Heap をスラッシングすることによって断片化されています。この数に近づくと、生存期間の短いオブジェクトが大量に発生し、空きメモリの断片が残っていることになります (このヒープは圧縮されないことに注意してください)。

于 2011-07-28T14:53:26.073 に答える