高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

SetProcessWorkingSetSize

14日、doronjoさんより、SetProcessWorkingSetSizeというAPIのご紹介をいただきました。doronjoさんが試したところ、どんどん肥大化していく(C#の)プログラムのメモリ使用量が、一時的に2MBまで下がったという話です。
MicrosoftのMSDNによると、

dwMinimumWorkingSetSize と dwMaximumWorkingSetSize の両方に 0xffffffff を指定すると、指定したプロセスのワーキングセットのサイズが一時的に 0 になります。プロセスは実質上、物理 RAM メモリから仮想メモリにスワップアウトします。

とのことですので、物理メモリのしわ寄せが全部仮想メモリに行ってるだけ…という考え方も出来ますが、そのときにガベージコレクタが動いて、ゴミを全部削除するという可能性もありますね。後者だとするとそれはとてもうれしいのですが。


 どちらにせよ処理が処理ですので、使うとしてもあんまり頻繁に使うと返って邪魔になりそうです。非稼働状態であるタイミング――Idleあたりでしょうか?しかし毎Idleタイムにやられても困りますので、JmEditorみたいに最後のIdleから5秒間何もなかったら…なんていう条件を付けて動かすのもいいかもしれません。

 何はともあれ、ありがとうございます。こちらでも試してみたいですね。