twitter ■お問い合わせ当サイトへのリンクサイト仕様

現在位置 > LostTechnology > Tips > 基本優先度を変更する

基本優先度を変更する

Windows 2000/XP

Windowsのアプリケーションの中には、CPUパワーを根こそぎ持っていき、CPU100%負荷となるようなものがあります。どうしてもその状態で使用しなければならないというものならばともかく、ゲームでこれをやられるとWindowsのパフォーマンスが低下してほかのアプリケーションを同時に使うことができません。

この現象はシングルプロセッサ環境で起こるものであり、マルチプロセッサ環境(Hyper-Threading含む)では発生しません。マルチプロセッサ環境ではCPUパワーを100%持っていこうとするアプリを実行してもCPUの1つがフルに使われるものの、残りのCPUは使われないため処理能力に余裕があるため、ほかのアプリケーションの処理速度はほとんど影響を受けないのです。CPUの数までは重いアプリケーションを同時に動かしても大丈夫。タスクマネージャを見るとシングルプロセッサ環境と表示が異なることがわかります。

ここで紹介するのはハードウェアを買い換えることなく、対処療法で解決するための手順です。知っている人も多いと思いますが、結構聞かれることを考えると意外に知らない人が多いようですので……。

ただしマルチプロセッサ環境でも、WMV9のようにマルチスレッド処理でCPUパワーを限界まで引き出すような作り方をしているものを実行している間は影響を受けます。

タスクマネージャを利用して解消

Windows2000/XPでは、タスクマネージャからアプリケーションの基本優先度を変更することができます。Shift+Ctrl+Escを押すか、Ctrl+Alt+Deleteを押すか、タスクバーの何もないところで右クリックしてタスクマネージャを呼び出します。プロセスタブを選び、CPU負荷の高いアプリケーション、あるいは処理優先度を変更したいアプリケーションをプロセス一覧から選んで、そのアプリケーション名を右クリックしてください。優先度の設定で該当アプリケーションの処理優先度を変更することが可能です。

CPUパワーを根こそぎ持っていくCPU負荷100%のゲームなどは、基本優先度を低にすることで、ほかのアプリケーションを普通に使えるようになります。困っている人は一度お試しあれ。

マルチプロセッサ環境の場合は、基本優先度の設定を変更するだけでなく、プロセスを右クリックして「関係の設定」から「プロセッサの関係」を利用して使用するCPUを割り振ることもできます。重い処理のアプリケーションが邪魔な場合は、常に1つのCPUをチェック解除して使用しないようにし、CPUパワーの余力を残しておくということが可能です。

起動ショートカットを変更

頻繁に使うアプリケーションの基本優先度を変更したいのであれば、アプリケーション起動用のショートカットファイルを変更するのがよいでしょう。ショートカットアイコンを右クリックし、プロパティを開きます。リンク先の欄にアプリケーションのファイルが記述されていると思いますが、その前にcmd /c start /low を追記してください。OKボタンを押すとcmdはフルパスに自動的に書き換えられます。

cmdはコマンドライン呼び出し、/cは確認なしのオプション、startはプログラム起動用コマンド、/lowは基本優先度を低にするオプションです。なお、この指定を行なうとアイコンが変化してしまいます。アプリケーションのアイコンを使いたい場合は、プロパティにあるアイコンの変更を実行して、該当アプリケーションを指定してアイコンをアプリケーションのものに再設定しましょう。

[補足]CPU負荷が高くならない開発の仕方は?

CPUを100%使い切るタイプのアプリケーションは、多くの場合プログラムの開発者の設計上の問題です。ここではわかりやすくゲームを例にあげてみましょう。

ゲームの場合は、3D描画で常に高フレームレートが必要というようなケースを除き、キーボードやマウスの入力を待つためのループにCPU処理が費やされます。つまり、CPUの処理のほとんどが入力待ちということです。キー入力、あるいはマウス入力をチェックし、入力がなければ入力待ちへ戻すというループ処理になっていることが大半でしょう。

しかし、入力待ちという状態は、ゲーム側はCPUパワーを必要としていません。それなのに急いで次の入力を全力実行で要求させる必要性はありませんよね。WindowsAPIのSleepを使って、入力がなかった場合はSleep(20)という感じでほかのアプリケーションへちょっと処理時間を解放してやればいいのです。Sleep命令は指定時間だけほかのアプリにCPUパワーを解放してあげるもの。APIのSleepはミリ秒なので、Sleep(20)の例ではわずか20ミリ秒の解放ですが、これを入れるだけでも全然処理が軽くなります。プログラムのループ部分にこの1行を挿入するだけで、ほかのアプリも普通よりやや遅い処理速度で使える程度に大幅改善されるんですよね。Sleep処理がない場合は、次の入力があるまでCPUは全力で待ち続けろという指令になります。すなわち、ほかのアプリケーションの処理速度が絶望的なまでに遅くなるわけです。

こんなちょっとした部分の手抜きでユーザー側に不便を強いることになっている現状は憂慮すべき問題だと思うんですけどねぇ……。