2

2つのアプリケーションがMMFによってメモリを共有します。A MMF(約1GB)を作成し、BはそのMMFファイルを名前で開きます。Windowsタスクマネージャーを見ると、Aには1GBのメモリがあります。しかし、Bアプリを数回閉じて再度起動した後(または1日後?再現方法がわかりません)、WindowsタスクマネージャーのAのメモリは1Kバイト未満です。

私の推測では、おそらくAアプリはMMFの作成後に何もしないため、WindowsはMMFがBアプリに属していると見なします。(ただの推測)。

私のOSはWindows2003Enterprise x64、SP2です。

その理由を知っている人はいますか?前もって感謝します。

4

3 に答える 3

1

メモリマップトファイルは引き続き仮想アドレス空間の一部です。Windowsのリリースごとに変更されるタスクマネージャーの代わりに、perfmonを使用して信頼性の高いカウンターを取得してください。プロセスのPerfmonカウンター| 仮想バイト(合計VAS)が最も興味深いものです。

于 2010-01-22T02:40:40.033 に答える
0

これは、メモリワーキングセットの最小化が原因です。

みんなありがとう。:)

于 2010-01-22T03:49:24.730 に答える
0

私の理解では、1GBは仮想アドレス空間に予約されていますが、メモリは実際にはタッチされたページにのみ割り当てられます。メモリマップトファイルは、仮想メモリAPIと並行して実装され、どちらもNT仮想メモリマネージャに基づいて構築されます。説明については、この記事と図を参照してください。

ファイル全体にデータを入力しましたか、それとも1GBを割り当てましたか?

アップデート:

タスクマネージャーで表示している列はどれですか。

デフォルトのメモリ(プライベート作業)は、物理的に割り当てられたメモリを表します。

[コミットサイズ]列を追加して、プロセスに割り当てられた仮想アドレス空間の合計量を確認できます。

これは、タスクマネージャで表示できるさまざまなメモリ統計とその意味の概要です。

于 2010-01-22T02:30:47.513 に答える