Q293215 : The working set of an application is trimmed when its top-level window is minimized
.NET についてよく耳にする「なんかやたら大量にメモリを使っているんですが」と「最小化すると減るよ」について.
- http://www.ailight.jp/BBS/Detail.aspx?Header_ID=1306
- id:TakamiChie:20050515:1116125836
- id:ladybug:20050521:p2
LadyBug さんが行われているように,管理ツールの『パフォーマンス』を使って Process オブジェクトの Working Set カウンタ*1に注目してみると,確かに WinForms アプリケーションを最小化時すると大きく値が減少することが分かります.
.NET ということで GC との関係も気になるところですが,もしかしたらこの現象,Win32 アプリケーションに共通なものなのかもしれません*2.
SYMPTOMS
When an application's top-level window is minimized through the Minimize command from its System menu or a click on its Minimize button, the operating system will trim the working set for the process. This is done to free up RAM for foreground applications. As a result of this trimming, a process may experience significantly poorer performance because its memory pages are being faulted back into RAM.
実際,KB に載っている回避コードを WinForms アプリケーションに移植してみたところ,最小化による Working Set の減少は起きなくなりました.
んで,そういや「ウィンドウ最小化で」って最近どこかで見たよなーということで思い出したのがこれです.
解決方法は、IE6のウィンドウを最小化すること。ウィンドウの最小化でキャッシュされたメモリが開放されるという。また、Webサイト管理者向けには、HTMLファイル内にBODY要素「ondragstart」イベント属性を記述し、ドラッグを無効にすることを掲載している。
http://support.microsoft.com/kb/900856/ja
Q293215 とは直接は関係ないのかもしれませんが,「最小化」がトリガーとなるという共通点はなかなかに興味深いですね.