Hatena::ブログ(Diary)

NyaRuRuの日記 RSSフィード

archive

2006-07-03 Get the fact.

Firefox, Workingset and Vista

このネタも飽きてきましたが.GIGAZINEより.

IE7の最終ベータ版になる予定の「Internet Explorer 7 Beta 3」は最小化すると、利用しているメモリをシステムに戻し、そのときに必要な最低限のメモリだけを利用するという仕様になったようです。メモリをどんどん消費するFirefoxへの対抗策らしいですが…。

詳細は以下の通り。

Internet Explorer 7 Beta 3 may have memory handling advantages over Firefox | TG Daily

IE7 Beta 3とFirefox 1.5.4で同じページを表示した結果、いずれも最初は同じように64MBのメモリを消費。しかし最小化するとIE7 Beta 3は10MBしかメモリを利用せず、Firefox 1.5.4は相変わらず57MBのメモリを消費した、とのことです。

要するにIE7 Beta 3はメモリ上に展開されていた分を仮想メモリなりに書き戻していると推測されますが、これと同じ事はFirefoxやThunderbirdでも設定を変えれば簡単にできるわけで。

GIGAZINE - FirefoxやThunderbirdのメモリ消費量を劇的に減らす方法

体感速度がやや落ちてレスポンスが多少下がったとしても、常にメモリをバカスカ消費されるよりはマシだ、というトレードオフの考えを受け入れることができるのであればこういう考え方もありなのではないかと。

どうやらマイクロソフトのIE7開発陣はデフォルト設定でメモリをいつも消費しない方向の路線で行くようですが、Firefoxの選択やいかに。

Internet Explorer 7 Beta 3は最小化するとメモリを解放する

これは Windows OS の微妙な挙動によるもので,

  • Windows Vista では Internet Explorer 7+ を最小化してもタスクマネージャに表示される「メモリ消費量」はほとんど変化しないこと*1
  • 同様に,Windows Vista では『FirefoxやThunderbirdのメモリ消費量を劇的に減らす方法』の効果が無くなるか,限定的になるであろうこと
  • わざわざ最小化に拘らなくても,C# で 10 分ぐらいでかけるツールで「メモリ消費量」の表示値を激減させる方法があること

について先日書きました(id:NyaRuRu:20060620#p2).

おまけ.

そんなに減らしたいなら外から SetProcessWorkingSetSize 呼んでやりましょうと.以下 C# で作ってみた使い捨てアプリにて SetProcessWorkingSetSize を呼んでみるの図.

初期状態 ワーキングセット 70 MB
Start Trimming 押下直後 400 KB*2

ソースはこちら.

http://www.dwahan.net/nyaruru/hatena/MyTrimmer.zip

id:NyaRuRu:20060620#p2

ソースを読む限り,Mozilla 製品は KB293215 の挙動を前提としているようですね.

nsWindow.cpp Rev. 3.651 1825 行目

1825 NS_IMETHODIMP nsWindow::SetSizeMode(PRInt32 aMode) {
1826 
1827   nsresult rv;
1828 
1829   // save the requested state
1830   rv = nsBaseWidget::SetSizeMode(aMode);
1831   if (NS_SUCCEEDED(rv) && mIsVisible) {
1832     int mode;
1833 
1834     switch (aMode) {
1835       case nsSizeMode_Maximized :
1836         mode = SW_MAXIMIZE;
1837         break;
1838       case nsSizeMode_Minimized :
1839 #ifndef WINCE
1840         mode = gTrimOnMinimize ? SW_MINIMIZE : SW_SHOWMINIMIZED;
1841 #endif
1842         break;
1843       default :
1844         mode = SW_RESTORE;
1845     }
1846     ::ShowWindow(mWnd, mode);
1847   }
1848   return rv;
1849 }

(というかこのコード,WINCE マクロが定義されているとき未初期化変数 mode に触ってない?)

mozillaZine によると,config.trim_on_minimize の効果は次のようなものだそうです.

Possible values and their effects

true
Allow Windows to reclaim memory when the program is minimized.
false
Prevent Windows from reclaiming memory when the program is minimized. (Default)
Config.trim on minimize

従って,config.trim_on_minimize="true" は,「最小化時にワーキングセットをトリミングするよ」という設定ではなくて,「最小化時に OS がワーキングセットをトリミングすることを許可するよ」という設定のようですね.ということは,config.trim_on_minimize="true" にもかかわらず「最小化時にワーキングセットをトリミングされない」という現象が起きたとしても,それは by design と*3

*1:繰り返しになりますが,常に同じ挙動をするとは限らないことに注意をしてください.メモリアクセスパターンの解析やヒューリスティックなアプローチが進化した可能性があります.また Internet Explorer 6 に関する KB900856 のように,OS のメモリ管理とは関係のない最小化時のロジックが,Intenet Explorer には実装されているかもしれません.

*2:実際には Update するともう少し増えている

*3:Windos Vista とか Windows 9x 系とか?

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/NyaRuRu/20060703/p2