0

ページ ファイル サイズがゼロに設定されたマシンで .net コードを実行しています。私のアプリケーションは System.Diagnostics.Process.PagedMemorySize64 をログに記録し、値 > 0 を示しています。

どうすればいいの?

PagedMemorySize64 のドキュメントには次のように書かれています。

このプロパティによって返される値は、プロセスによって使用される仮想メモリ ページング ファイル内のメモリの現在のサイズを表します。

私は何が欠けていますか?

背景:
メモリ リークがあるかどうかを判断するためにこれを行っています。System.Diagnostics.Process からのメモリ値は増加し続けていますが、使用しているプロファイルは増加していません。

ラージ オブジェクト ヒープの断片化を扱っている可能性があると思います。私のプログラムは、大きな画像の WPF スライド ショーを表示し、画像間にフェード アニメーションを表示しています。

どんな説明でも大歓迎です。

ありがとう。

4

1 に答える 1

1

説明がおかしいと思います。プロセス内の実質的にすべての仮想メモリ ページはページング可能です。しかし、それらは必ずしもページング ファイルで終了するとは限りません。DLL から読み込まれたコードは、そこに格納する必要はありません。メモリ マネージャーは、スペースが必要なときにページを破棄し、スワップインが必要なときに DLL から再読み込みします。

.NET プロセスでは、少なくとも CLR、JIT コンパイラ、および Ngen-ed アセンブリのコード用にマップされたページになります。すべての .NET フレームワーク アセンブリは Ngen 化されています。ページング ファイルは、JIT でコンパイルされたコードとデータの残りの部分に使用されます。

この数値は、リークの診断には役立ちません。それは常に変化します。メモリ マネージャにページのスワップ アウトを直接決定させるために行うことは何もありません。おそらく、プログラムのメイン ウィンドウを最小化する以外に、メモリ マネージャーがワーキング セット (= RAM に常駐するページ数) を積極的にトリミングするようになります。先に進むには、優れたメモリ プロファイラーを入手してください。

于 2010-02-16T20:49:22.460 に答える