こんにちは、阿久津です。Internet Explorer(以下、IE)8では、LCIE(Loosely-Coupled IE)と呼ばれるプロセスモデルが採用されました。これはIE8の安定性を向上させるために、前バージョンであるIE7から改善されたポイントの一つ。

IE7で複数のタブを開き、Webページを閲覧している際に、任意のサイトでクラッシュしてしまいますと、すべてのタブが閉じてしまいました。この問題を解決するのがLCIE(Microsoftの技術資料によると「ルーシー」と発音するそうです)の存在。ユーザーインタフェースフレームをタブから切り離すことで、安定性を向上させるというものです。

具体的にはユーザーインタフェースフレームと、お気に入りバー、コマンドバーの3つをメインプロセスに残し(IE7では、サブプロセス内にユーザーインタフェースフレームが存在します)、サブプロセス上でグルーピングされたタブが起動し、拡張ツールバーやActiveXコントロールもタブ内で処理されるため、何らかの理由でクラッシュしても、グルーピングされたタブ内で終了処理が完了するのです。

ここまでの話をご覧になりますと、何か思い出した読者も多いのではないでしょうか。それがエクスプローラのプロセス分離機能。確かWindows 2000あたりから用意され、HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ AdvancedキーにDWORD値「SeparateProcess」を作成し、データ値を「1」に変更するという設定を行なうことで、起動するエクスプローラのプロセスを分離することが可能でした。元々同一プロセスでプログラムを実行しますと、メモリ使用量を軽減できるというメリットがありましたので、以前のWindows OSでは、同様のロジックを使うことが多かったのですが、最近はメモリ使用量よりも安定性が優先されるようになり、IE8のLCIEのような仕様変更が行なわれたのでしょう(図01)。

図01: Windows 7の「フォルダーオプション」では、エクスプローラのプロセス起動を制御する、<別のプロセスでフォルダーウィンドウを開く>という項目が用意されています

さて、タブを閉じればすぐにプロセスが終了するというのが、一般的な感覚です。しかし、IE8からほどこされた仕様変更により、タブを閉じてもプロセスは終了しません。プロセスを監視するタスクマネージャなどで監視しますと、IE8のサブプロセスが一分ほど残されたままになっていることがわかります。なお、この一分間に別の新しいタブを開きますと、プロセスの再利用が行なわれますが、IE8自体を終了するときは、すべてのプロセスが終了する仕組みになっています(図02~04)。

図02: IE8を起動し、複数のタブを起動した状態では、IE8の実体である「iexplorer.exe」がサブプロセスを持って起動しています

図03: より多くのタブを開きますと、同じように複数のサブプロセスが起動します

図04: 今度は各タブを閉じてみましょう。任意のタブを右クリックし、メニューから<他のタブを閉じる>をクリックします

図05: IE8のタブはすぐに閉じますが、プロセス上の「iexplorer.exe」は残されたまま。そのまま監視していますと、約一分後に各サブプロセスが閉じられます

この仕様によりパフォーマンスや安全性が向上しますが、ネットPCのように効率性を優先したいコンピュータでは、冗長な機能になりかねません。また、前述した仕様とは異なり、IE8自身を終了しようとしてもうまく動作しない場合が発生します。そこで、サブプロセスを終了するタイミングをチューニングしてみましょう。なお、IE8は終了させた状態で行なってください。

1.[Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力してから<OK>ボタンをクリックします。
2.レジストリエディタが起動したら、HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Mainキーをたどって開きます。
3.右ペインの何もないところを右クリックし、メニューから<新規>→<DWORD値>と選択します。
4.ステップ03で作成したDWORD値の名前を「TabShutdownDelay」に変更してください。
5.DWORD値「TabShutdownDelay」をダブルクリックし、<10進数>をクリックしてから、値のデータを「10」などに書き換えて<OK>ボタンをクリックします。
6.[F5]キーを押して変更内容をシステムに反映させてから、レジストリエディタを終了させましょう。

これでチューニング終了です(図05~08)。

図05: [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力して<OK>ボタンをクリックします

図06: レジストリエディタが起動したら、HKEY_CURRENT_USER \ Software \ Microsoft \ Internet Explorer \ Mainまでキーをたどって開き、右ペインの何もないところを右クリック。メニューから<新規>→<DWORD値>と選択し、「TabShutdownDelay」を作成します

図07: DWORD値「TabShutdownDelay」をダブルクリックで開き、<10進数>をクリックしてから、値のデータを「10」などに書き換えてから<OK>ボタンをクリックします

図08: [F5]キーを押して変更内容をシステムに反映させてから、レジストリエディタを終了します

IE8を起動し、あらかじめ複数のタブを開いてから閉じますと、すぐにプロセスが終了するようになりました。今回のチューニングポイントはステップ05で指定したデータ値。同数値は10進数のミリ秒で指定し、既定値は60000(60秒)となっています。単純に考えると0ミリ秒でも構わないように見えますが、ほかのプロセスとコンフリクト(衝突)し、システム全体が不安定になりますので、10ミリ秒程度にとどめて起きましょう。また、初期状態に戻すには、DWORD値「TabShutdownDelay」を削除し、IE8を再起動してください(図09~10)。

図09: IE8を起動して複数タブを開いた状態で、任意のタブを右クリックします。メニューから<他のタブを閉じる>をクリックしましょう

図10: プロセスを監視していますと、今度はサブプロセスが瞬時に終了していきます

それでは、また次号でお会いしましょう。

阿久津良和(Cactus)