ROをやってるユーザの大半が経験してる事だと思いますが。
『Alt+Tab or Windows+Tab で画面切り替え時エクスプローラーが固まる。』
中の人も結構困っていました。
状況としては・・・
・ROにフォーカスが戻ったところで右クリックが固定されたようになり画面が回る。
・他のアプリに切り替えようとしたところエクスプローラーが固まり反応しない。
大雑把にこの2点に絞られるかと。
当初、Vista、7で大きく目を引く『Aero』が原因かと思わされました。
が、もう1つ『SuperFetch』をいう機能があります。
今回はこちらに注目してみました。
このSuperFetchがどんな機能か、というと。
・Vistaから導入された新しいキャッシュ技術
・ユーザの使用状況を学習して必要な時間帯に必要なファイルがキャッシュメモリ内に格納されるように振舞う。
Vistaではこの機能が青天井でメモリを食いつぶしていたため、
頻繁にメモリ不足を起こしていましたが、7からは領域に制限がかかったため
漸く使える機能になった。
SuperFetchの実態は既存のキャッシュ技術の延長でしかなく、
XPの頃にも普通に存在してたPrefetcherの機能拡張版です。
違いと言えばキャッシュ内容に大して優先度が付いたことと、
空き時間を利用して自動的に読み込みを行う点となります。
XPではキャッシュが溢れそうになると古いデータから解放していたらしく、
頻繁にアプリケーションの起動を行ったり、長時間の使用に弱い作りだったようです。
MS曰く、「SuperFetchは物理メモリの空き領域を最大限に使う」
とアナウンスされており、Vistaでの振る舞いはまさにその通りになっているので、
最初から大容量の物理メモリを実装したPC環境での使用が想定されています。
実装メモリ量次第では切った方がよく、SuperFetchの設計思想に合致するような
大容量メモリ環境下では有効にしておいた方が良いと言うことです。
問題はその境界線が何処にあるかで、こればっかりはユーザーの使用状況も
考慮しないと見えてこないので、どちらが良いとも言えません。
と、このままでは長々と説明だけになりそうなので結果から
ここ数ヶ月SuperFetchをサービスのON/OFF、またはレジストリキーを編集して
振る舞いを変えたりしつつ挙動を確かめていました。
結果としては・・・
ROと他画面を切り替えてもエクスプローラーが固まることはなかった。
でした。
うちのPC1台のみのテストでしたが、満足な結果となりました。
また特徴としては以下のような物が見えてきました。
•SuperFetchで使用している領域はタスクマネージャ上からは見えてはいないが、
確かに存在しており、4GB環境下ではだいたい1.5~2GBくらいになっている。
また、長く使用するほどキャッシュが蓄積されキャッシュ領域が肥大化してくる。
・「物理メモリが必要な状況になると、即座にキャッシュ領域を解放して使用可能にする」
とあり、確かにそうしようと振る舞うが、解放が遅いので即座にとはとても言えない。
事実、警告メッセージを数回確認。
•以上2点の特徴より、使用メモリ量がキャッシュ領域に掛かるようになると
全体の動作が非常に重くなってくる。
・また、使用時間が長いほどキャッシュ量が増えると言う特徴から、
長時間PCを起動し続ける環境においては搭載する物理メモリ量も相応に多くする必要がある。
スリープを利用して、出来る限り長時間PCが起動した状態を維持する場合は
物理メモリ4GBでは足りない。
つまり、SuperFetch使うならば・・・
・限界までメモリ積む。
・こまめに再起動する。
・キャッシュ領域に掛からないように気を遣う。
この事から32bitOSでは有効活用できない機能といえるかもしれない。
逆に8GB積んでいる64bitOSではSuperFetch機能ONのほうが動作は快適だった。
長時間(5時間程度ログイン)ROを実行してもエクスプローラーが固まることもなし。
肝心のSuperFetchのON/OFFですが。
・コントロールパネルの表示方法がカテゴリの場合
『コントロールパネル』-『システムとセキュリティ』-『管理ツール』
-『サービス』-一覧からSuperFetchを選択し、サービスの停止。
要は、サービスの一覧からSuperFetchを見つけ停止しなさい、ということ。
で、ここでもう一つ。
SuperFetchは基本的に自動学習に任せる作りです。
ここにユーザーの意志を介入させることはできませんが、
一応レジストリキーを変更することによって大雑把な方針変更を行うことは可能です。
うちの環境ではこちらの方法を採用しています。
該当のキーは HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters 直下の
EnablePrefetcher=DWORD:0x00000003
EnableSuperfetch=DWORD:0x00000003
上記2つ。
この値を0~3に変更することによって振る舞いを変えることが出来るようです。
設定値の意味は以下の通り。
0=無効
1=アプリケーションプリフェッチ有効
2=ブート(システム)プリフェッチ有効
3=両方有効
0についてはSuperFetchサービスを停止した状態/Prefetcherを停止した状態。
両方0にすると動きがかなりもっさりした物になります。
1は恐らく実行ファイルとロード時に読み込むファイル(DLLなどの実行可能モジュール)
のみにターゲットを絞ってキャッシュを行うもので、メモリ占有率もそこそこで、
それなりの快適さを得られる物だと思います。
2は挙動を見る限りでは、実行ファイル以外のファイルもキャッシングしている様子。
長時間使用してるともたつく原因はこの設定に原因がありそうです。
断定はできません。
3はデフォルト設定です。
1,2両方の機能がONになっている状態と思われます。
うちの環境では両方1にしています。
今のところアプリケーション起動は高速なままで、長時間使用時のもたつきは
解消されているように思います。
ROを起動中のエクスプローラーが固まるという減少も発生していません。
とはいえ、長時間起動し続けてみないとなんとも言えませんが・・・
(24時間程度は検証済み)
長々と書いてしまいましたが、挙動が変わったのでこれが原因の1つに
なっているのは当たっていると思います。
また、今回の検証では
・搭載メモリ量が少ない場合、PC使用時間の長さに応じてSuperFetchのON/OFFを切り替えた方がよい。
・メモリ使用量が搭載メモリ量 - 1~1.5GBを超える状態ならメモリを増設したほうがよい。
・搭載メモリ4GBを超える場合はSuperFetchを切るべきではないが、レジストリキーを編集してキャッシング対象を制限した方がよい。(32bitOSは認識されるメモリサイズに限界があるので特に)
・搭載メモリが6GBを超える64bitOSのような環境ならば設定変更は必要ない。
もう少し長い目で検証していこうとは思いますが、
この設定を利用してみようという方はこの記事の上をよく読んでからにしてください。
責任はもちきれないので・・・
スポンサーサイト