読者です 読者をやめる 読者になる 読者になる

ハードページフォールト

"Working Set" から外されたメモリページの内容がディスク上に書き出され,元々の物理メモリの内容が消去されてしまうこともあります*1.この後に該当アドレスにメモリアクセスが発生すると,HDD に退避したデータを物理メモリに読み出した上で動作が継続されます.このようなディスクアクセスを伴うページフォールトは「ハードページフォールト」と呼ばれています.ソースコード上はただのメモリアクセスという箇所あっても,非常に長時間処理をブロックされる可能性があることに注意してください.
これが実際どれぐらい影響を及ぼすかは,以下のように確かめられます.上のサンプルの SetProcessWorkingSetSize を呼び出した直後にプログラムを一時停止させ,いわゆる「メモリ最適化系」のツールを実行してみます.今回は「メモリの掃除屋さん」を利用させて頂きました.
http://www6.plala.or.jp/amasoft/soft/index.html
SetProcessWorkingSetSize の呼び出しが終わってバッファのを "Working Set" から追い出したところでプログラムを一時停止し,「メモリの掃除屋さん」の「手動で掃除」を「90%」の設定で実行します.その後プログラムの動作を継続させた結果がこれです.

*1:『インサイドMicrosoft Windows (上)』7.11.1 ページリストと状態遷移, 7.11.2 変更ページライタ