Windows Vistaからアプリケーション起動高速化のためにSuperfetchという機能が加わりました。
具体的には過去のユーザのPC使用履歴から、メモリにあらかじめプログラムやファイルを読み込んでおく機能です。
要は、PCが普段ユーザの行動を観察して、ユーザの仕事を速くできるようにためにあらかじめ仕事に必要な道具を揃えておいてくれる機能です。
私の使用OSはWindows 7なので、以降はWindows 7のSuperfetchについて書きます。
タスクマネージャを開くとキャッシュ済みという項目がありますが、この中にSuperfetchであらかじめメモリに読み込まれたデータが含まれています。
このキャッシュ済みが増えれば、当然空きメモリは少なくなります。
あらかじめデスクの上に道具を準備しておくということは、デスクの作業領域がうまっていくということです。
これでは不規則的に利用するアプリケーションを使いたいときに困ってしまわないでしょうか?
しかし、Superfetchではあらかじめ読み込んでおいたメモリは、別のアプリケーション実行の際にはすぐに解放されて使えるようにしてくれるようです。
デスクの上に準備された道具は、使っていない限り、出し入れが自由ということです。
しかし、私は疑問に思います。
出し入れがすぐにできるといっても、次に読み込むアプリケーションに必要な分のメモリを解放するという一手間がある限り、メモリに空きがなければ確実にPCの性能低下を招くのではないでしょうか?
メモリの解放という処理がそんなに簡易な処理であるとは思えません。
少なくとも、解放すべきアプリケーションやデータの種類を今までの使用履歴などから優先度で決定して、解放に必要なメモリ領域分を調べて、それに該当するメモリ領域を解放するという手間が一回の処理にあるはずです。これに新しいアプリケーションデータの読み込みが加わります。
これが一発で行われるならまだ良いですが、カーネルができるだけメモリ領域を無駄なく埋めようとするのであれば、読み込み後にまた余ったメモリを調べて、適応なプログラムをロードなんていう動作が加わる可能性があります。
これらの処理は何回かに分けて実行されることになり、処理の分割が増えれば、それだけI/Oの回数は増えるのでPCの動作は遅くなります。
実際、私は何度もPCの動作が劇的に遅くなるという状況に何度も遭遇しています。
そのときにタスクマネージャを開いてみると、決まって空きメモリが0になっています。
私の環境はメモリが6GBしかないので、それが原因でSuperfetchがうまく機能しないのかもしれません。
もともとメモリが大量に使えるという前提での機能ですから。
それに加え、私のシステムを入れているストレージは遅いので、それが原因で極端な性能低下が起こっているのかもしれません。
とにかくキャッシュ済みのメモリをすぐに使えるようにしてあるといっても、空きメモリが0になることに大きなリスクがあると私は思います。
実際、Superfetchを無効にすると極端に動作が遅くなるという現象は回避できました。
Superfetchの無効方法を以下に記します。
■Superfetchを無効にする方法
1. Windowsキー+rを押し、ファイル名を指定して実行を開き、services.mscと入力し実行し、サービスウィンドウを開きます。もしくは、
コントロールパネル→すべてのコントロールパネル項目→管理ツール→サービス
からサービスウィンドウを開くことができます。
2. Superfetchという項目を一覧から探してダブルクリックでプロパティを開きます。
3. Superfetchのプロパティでサービスの状態を停止にし、スタートアップの種類を無効にします。
4. OKをクリックすれば、Superfetchは無効になります。
ただし、一度再起動しなおすか、休止状態にしなければ、今までSuperfetchで確保されたメモリは解放されないので注意して下さい。
Superfetchは仕事場など普段の作業がルーチン化しているような場では効果を発揮する機能だと思いますが、個人使用のような不規則的な作業を行う環境であれば逆に動作を遅くさせる原因となる可能性があります。
また、メモリが少ない場合や、I/Oが遅い環境では同様に動作を極端に遅くする原因になり得ます。
個人使用のPCを利用していて突然動作が極端に遅くなってしまう場合、Superfetchを疑ってみると解決するかもしれません。
具体的には過去のユーザのPC使用履歴から、メモリにあらかじめプログラムやファイルを読み込んでおく機能です。
要は、PCが普段ユーザの行動を観察して、ユーザの仕事を速くできるようにためにあらかじめ仕事に必要な道具を揃えておいてくれる機能です。
私の使用OSはWindows 7なので、以降はWindows 7のSuperfetchについて書きます。
タスクマネージャを開くとキャッシュ済みという項目がありますが、この中にSuperfetchであらかじめメモリに読み込まれたデータが含まれています。
このキャッシュ済みが増えれば、当然空きメモリは少なくなります。
あらかじめデスクの上に道具を準備しておくということは、デスクの作業領域がうまっていくということです。
これでは不規則的に利用するアプリケーションを使いたいときに困ってしまわないでしょうか?
しかし、Superfetchではあらかじめ読み込んでおいたメモリは、別のアプリケーション実行の際にはすぐに解放されて使えるようにしてくれるようです。
デスクの上に準備された道具は、使っていない限り、出し入れが自由ということです。
しかし、私は疑問に思います。
出し入れがすぐにできるといっても、次に読み込むアプリケーションに必要な分のメモリを解放するという一手間がある限り、メモリに空きがなければ確実にPCの性能低下を招くのではないでしょうか?
メモリの解放という処理がそんなに簡易な処理であるとは思えません。
少なくとも、解放すべきアプリケーションやデータの種類を今までの使用履歴などから優先度で決定して、解放に必要なメモリ領域分を調べて、それに該当するメモリ領域を解放するという手間が一回の処理にあるはずです。これに新しいアプリケーションデータの読み込みが加わります。
これが一発で行われるならまだ良いですが、カーネルができるだけメモリ領域を無駄なく埋めようとするのであれば、読み込み後にまた余ったメモリを調べて、適応なプログラムをロードなんていう動作が加わる可能性があります。
これらの処理は何回かに分けて実行されることになり、処理の分割が増えれば、それだけI/Oの回数は増えるのでPCの動作は遅くなります。
実際、私は何度もPCの動作が劇的に遅くなるという状況に何度も遭遇しています。
そのときにタスクマネージャを開いてみると、決まって空きメモリが0になっています。
私の環境はメモリが6GBしかないので、それが原因でSuperfetchがうまく機能しないのかもしれません。
もともとメモリが大量に使えるという前提での機能ですから。
それに加え、私のシステムを入れているストレージは遅いので、それが原因で極端な性能低下が起こっているのかもしれません。
とにかくキャッシュ済みのメモリをすぐに使えるようにしてあるといっても、空きメモリが0になることに大きなリスクがあると私は思います。
実際、Superfetchを無効にすると極端に動作が遅くなるという現象は回避できました。
Superfetchの無効方法を以下に記します。
■Superfetchを無効にする方法
1. Windowsキー+rを押し、ファイル名を指定して実行を開き、services.mscと入力し実行し、サービスウィンドウを開きます。もしくは、
コントロールパネル→すべてのコントロールパネル項目→管理ツール→サービス
からサービスウィンドウを開くことができます。
2. Superfetchという項目を一覧から探してダブルクリックでプロパティを開きます。
3. Superfetchのプロパティでサービスの状態を停止にし、スタートアップの種類を無効にします。
4. OKをクリックすれば、Superfetchは無効になります。
ただし、一度再起動しなおすか、休止状態にしなければ、今までSuperfetchで確保されたメモリは解放されないので注意して下さい。
Superfetchは仕事場など普段の作業がルーチン化しているような場では効果を発揮する機能だと思いますが、個人使用のような不規則的な作業を行う環境であれば逆に動作を遅くさせる原因となる可能性があります。
また、メモリが少ない場合や、I/Oが遅い環境では同様に動作を極端に遅くする原因になり得ます。
個人使用のPCを利用していて突然動作が極端に遅くなってしまう場合、Superfetchを疑ってみると解決するかもしれません。