McAfeeの「パソコン動作を軽くする対策8選」 のおはなし

スラドで記事になっていたので 少し触れてみようと思う。

結論としては、

  • McAfeeの記事は「懐かしい」
  • 批判している記事のほうは知識があまりに足りないのでひどいものだ

内容的にはWindows 98の頃に常識的tipsと言われていたものなので、検証もしないまままだいい続けている人がいるのか…という感じではある。

個別に

常駐アプリケーションの無効化

これは確実に効果がある。 だが、現在(Windows 10)は多くのケースにおいて「効果のある変更はできない」のが実情だ。

批判記事のほうではメモリの問題と考えているようだけれど、常駐アプリケーションに関してはメモリの問題はかなり小さい。 なぜならば、メモリが常駐アプリケーションのために不足するほど少ないことは稀だし(常駐アプリケーションの中身次第だけども)、メモリのアクセス速度は比較的速いため速度低下に通じる条件は割と狭い。

常駐アプリケーションが重くなる最大の理由は、「遅いリソースに対するアクセス」であり、一番はディスクアクセスである。 ほんのわずかでもディスクアクセスが入れば全体的に結構遅くなる。 ディスクからインデックスを作るようなタイプのプロセスは走っているときにエクスペリエンスを著しく落とすことがあるので、こういうのは切ると効果が大きい。

ネットワークアクセスも場合によっては重い。直接接続されているインターフェイスが高速ならいいのだが、不安定なWi-Fiなどにつながっているときの挙動が全体の動作に影響を及ぼす場合も(だいぶ稀だが)ある。 ただ、このような挙動を示すものはWindowsでは少ない。スマートフォンの場合全体の中でネットワークに依存する度合いが高いこともあってネットワークアクセスするバックグラウンドプロセスの存在は全体のエクスペリエンスに大きな影響を及ぼす。 これはWindowsでも大きな通信を常時している場合や低速なインターネット接続である場合は同様の問題があるだろう。

スリープ、あるいはブロックしないタイプのプロセスの場合は定期的にCPUを要求することになり、プロセススケジューラ的に負担になる。 さらにいえば、そこで負担のかかる処理をしているとCPU時間的にも重くなる。 これは「重い処理をするプロセスは」と捉えるかもしれないが、そんなことはない。Windowsにはforkはないけれど、例えばLinuxの場合はジョブスケジューラによってシェルスクリプトを定期実行しておくようにしたりすると、シェルスクリプトがコストの高いfork(2)を定期的に発行することになるので、結構重くなる。

これらの問題が体感的に重くなるかどうかはかなり様々な条件によって変わるのだが、そもそも記事自体が「重いと感じている」ことを前提として、「どのように重いと感じているかの究明はしない」というスタンスで「やってみれば軽くなるかもしれない」という記事を書いているのだから間違ってはいない。

容量の大きいファイルの削除、移動

「データ量が増えるとアクセス速度が遅くなる」のはそもそもHDDの物理的特性に依存している。 HDDでデータが増えるとデータが物理的に遠くなるのでかなり遅くなる。 ランダムアクセス速度はさらに遅くなる。

HDDはコンピュータの中で現在多くの場合最も遅いデバイスなので、これが遅くなるとCPUから見るととんでもなく低速化したことになる。

実際に記事はハードディスクドライブ、と明示されているので正しい。

これはファイルシステムとディスクデバイスの問題とは別である。

使っていないアプリケーションの削除

様々なリスクを低減することにはなるが、エクスペリエンスへの直接的な影響は基本的にない。

ただし、バックグラウンドでの動作を抑制し、ディスク要領を空けるという意味はあるので前2項と同じ話だろう。

デフラグをかける

ハードディスクでは物理的な移動量を減らすことにより効果がある。 ただし、昔ほど劇的な効果はない。 ディスクへのダメージを考えると「余程のことがない限りしないほうが良い」というのが近年の考え方だ。

ディスクのクリーンナップをする

これも空き要領を増やすのとだいたい同じなのだが、他にも効果がある。

キャッシュ自体がインデックス対象になるケースと、キャッシュが増えることでオーダーも増えるケースだ。 だが、そんなクソ実装なソフトウェアをイマドキ使っている人はあまりいないと思う。

ブラウザのキャッシュをクリアする

これは恐らく間違っている。

昔のInternet Explorerはそもそもキャッシュをプリロードする仕組みだったし、キャッシュヒットの計算量もキャッシュ量によって増加するようになっていた。

けれど、今はだいたいsqliteだったりするので、キャッシュ量がパフォーマンスに与える影響というのは無視できるレベルである。 それよりはキャッシュがないことによって発生するネットワークアクセスに伴うパフォーマンスへの悪影響のほうがずっと大きいだろう。

ちょっとハードディスクに対する容量管理に対して神経質すぎるのではないだろうか。

ディスク容量という意味ではブラウザキャッシュはものすごいサイズになることが多いので、むしろ容量の少ないSSDのほうが消したいかもしれない。

視覚オプション(アニメーション表示)の解除

批判のほうでメモリ云々言っているけれど、Windowsのアニメーションのロードは別にアニメーションを行うときに読まれるわけではないので、メモリに対する影響はない。

しかしこれはパフォーマンス上は効果がない。 今Windowsのアニメーションはハードウェアアクセラレーションによって実行されるようになっており、CPUに対する負担が(ほぼ、あるいは全く)ない。 ハードウェアアクセラレーションのできないPC構成は現代のものとはとても言えないだろう。

ただ、エクスペリエンスという点に限って言えば意味がないとも言い切れない。 なぜならば、アニメーションには時間がかかるので、「待ち時間が遅い=重い」と感じるかもしれないからだ。

記事中では

視覚効果を出すための動作はパソコンのパフォーマンス・動作スピードを落とす原因にもなります。

とあるが、動作スピードは落ちてもパフォーマンスは落ちない。

再起動を行う

再起動を行うことで問題が解消されるケースについて説明しまう。

昔定期的に再起動が必要だったのはメモリリークによるものである。 メモリリークとはメモリに領域を確保して開放しないままプロセスが終了してしまうことによりメモリを占有したままとなり、メモリの空きを減らしていってしまう問題だ。

だが、現在は処理系やOSの改善もあり、このようなケースは比較的少ない。

どちらかといえば終わるべきプロセスが終わらない、本来ひとつしか起動しないはずのプロセスが複数起動してしまう、ロックファイルが消えない、FIFOが多重に書かれて上書きされる、起動処理に失敗する、変数がバグって変なループにおちる、待ち合わせタイミングがおかしくなってブロックしつづける、マルチスレッドのプログラムが一部スレッドだけ落ちる、といった異常な状態が解消できる(ファイル残りなどは解消できない場合もあるが)。

だが、このような問題はごく最近、劇的に少なくなった。 以前はデスクトップユースで数日に渡って連続使用するというのは結構難しかったのだが、現在はWindowsでもLinuxでも1ヶ月程度の連続稼働はなんということもなくこなしてしまう。 こうした不整合による問題は非常に起こりにくくなったのだ。

だから、「不快なエクスペリエンスを解消するために再起動」というのは網羅的に書けば出てくるけれど、あまり重要ではないと思う。

ただし、書くこと自体には問題ないとも思う。 モデルライフで意識的に再起動したことが一度もない、というユーザーを私は結構知っているし、そこまでになると再起動することで解消することもままあるし、初心者向けに書かれていることから再起動という知識がないケースも想定されるのであっていいと思う。

以上を終えて

放っておいてもよかったような内容だが、なんとなく批判のほうが正しく、McAfeeが悪いような空気になっていたので書いてみた。

それぞれがどのような知識、どのような思考で書いたのかは容易に想像できる書き方であったが、 McAfeeのほうは本当に初心者を想定して、理解を度外視して手順だけを並べたのだろう。 だから意味的には同じものも書かれている。

しかし、私はどちらに対してもどうこう言いたいのではなく、 どちらかと言えばMcAfeeの書いていることが「懐かしいねぇ、2000年ごろは至るところでこんなことが書かれていたねぇ」と微笑ましく読むところだろう。