著作権とリンク スタッフ お問い合わせ 広告掲載

CPU使用率100%対策を考える

ゲームをプレイしていて演出中にCPUの使用率が一時的に100%になるというのならば納得できるものの、常時CPUの使用率が100%というのはいただけません。OS全体が重くなってほかのアプリケーションの使い勝手が悪化するし、CPUがフル稼働しているということは発熱や消費電力が増大してしまいます。環境問題が注目されている中で無駄に消費電力を増やしているのは好ましくないといえるでしょう。すべての面で完全な解決というのは難しいものの、対応策を知っておいても損はないはずです。

発生原因の推測と擬似的な再現ツール

WindowsのAPIでGetMessage関数あたりをwhileループで待つようにプログラムすればおそらく常時CPUの使用率が100%となることがないと思われます。試したのが結構前のことなので記憶に自信がありませんが、MSDNの推奨しているコードで大丈夫だったような気がするので……。もし、記憶が間違っていたら申し訳ない。

何も演出がなく、ただキー入力やマウス入力を待っている状態でCPU使用率100%となる問題が起こっているのは、おそらくマルチタスクを考慮する必要がなかったMS-DOS時代からプログラムの書き方を変えていないプログラマーがいるからだと思われます。入力待ちで何もすることがない状態で、入力待ちをするループ処理部分でCPUパワーを全部使って秒間何百回とかに対応できるような無駄に過剰な待ち受け状態となっているというわけですね。プレイヤーはそのような速度で入力をしない……というかできません(笑)。

まあ、文字だけでの説明ではわかりにくいため、「百聞は一見にしかず」ということで、わかりやすいようにそのようなマルチタスクを考慮しない作りのプログラムが実行されている状態を再現してみる簡単なプログラムを作成してみました。☠SleepTest.zipをダウンロードしてLhaplusやLhasaなどのツールで解凍してみてください。srcフォルダ内のファイルはDelphi7で記述したツールのソースコードです。プログラムに興味のある人ならばともかく、そうでない人はそのフォルダ内のファイルを気にしなくて構いません。プログラムのコードは非常にシンプルで、アプリケーションがアイドル状態(ゲームにおける入力待ちに近い状態)で呼ばれるOnIdleイベントにLoopExecuteを割り当て、本来はバックグラウンドで処理して終わったら処理終了を示すDoneをTrueにするところをFalseで返して延々とLoopExecuteを実行させて擬似的に待ち受け状態を再現しているだけです。

テストツールを起動する前に、Ctrl+Shift+Escを押すか、Ctrl+Alt+Deleteを押すか、タスクバー上で右クリックしてタスクマネージャを起動しましょう。そしてパフォーマンスのタブをクリックしてCPU使用率を見られるようにしてください。その後、SleepTest.exeをダブルクリックして起動します。実行ボタンを押すと、CPU使用率はPentiumII/III/4などのシングルコアCPUならば使用率が100%になり、デュアルコアCPUのPentiumDやCore2DuoなどのCPUでは50%になるはずです。CPUを1つをまるまるフルパワーで使い潰すためにそのような使用率となります。これが待ち受け状態でCPUパワーの全力を使ってひたすら待っているという状態を示しているわけです。

ここで「ループ内でSleep(20)を実行する」にチェックを付けてみてください。SleepはWindowsのAPIに用意されているもので、指定した時間だけほかのアプリケーションにCPUを解放するというものです。APIなので開発言語を問わず使えます。指定する時間はミリ秒単位なので、テスト用のツールではSleep(20)とわずか20ミリ秒を解放しているだけです。わずか20ミリ秒だけほかのアプリケーションにCPUパワーを優先的に割り当てる設定を実行するだけなのですが……入力待ちのループ内にこのプログラムコード1行を挿入するだけでどのようにOS全体での負荷の変化があるのかを確認できることでしょう。CPUの使用率が激減してツールを実行していないのとほとんど変わらないCPU使用率になるはずです。これは中断ボタンを押して比較してみるとわかります。

該当部分のコード → if (UseSleep.Checked) then Sleep(20);

要するにチェックがついていたら、WindowsAPIのSleep(20)を実行を追加してはさんでいるだけです。わずか20ミリ秒をほかのアプリケーション向けにCPUを解放するだけでここまで軽くなるということをご確認できたでしょうか? こんな単純な「Sleep(20)」を1行追加するだけで大きな差がつくことでわかるように、プログラマーがマルチタスクを考慮しているかしていないかでプレイヤーが大きな影響を受ける可能性があるのです。プログラム中で実行頻度の高くなる部分に入れておけばほかのアプリケーションとの並列動作が快適になるわけですね。

とはいっても、これはCPUの使用率が常時100%になってしまうプログラムの例と解決方法の1つとして紹介したものであり、高負荷になるアプリケーションのすべてがこのような作りとなっているわけではないことに留意してください。CPU使用率100%となるプログラムの中には、わずか1行で解消できるものもあるという現実を皆さんに知ってもらうためのサンプルですので。マルチタスクを考慮していないプログラムが少しでも減るようにという願いを込めてこの記事を執筆しているともいえるかもしれませんね。

なお、ツールの優先度設定のほうはオマケで用意してみたもので、OS上でツールが実行される優先度を変更するためのものです。「ループ内でSleep(20)を実行する」にチェックを付けない状態でのテストを想定してます。PCの環境によっては実感できないだろうと思いますが、リアルタイムにすればほかのアプリケーションが使いにくくなるほど重くなるとか、通常では重いけど低にするとほかのアプリケーションも普通に動かせるとか、そのあたりをテストできるようにしてみたつもり……。あくまでもオマケなのでこちらのテスト機能はあまりアテにしないでほしいかな。

優先度の変更で回避する

常時CPUの使用率が100%になるアプリケーションは、タスクマネージャでプロセスのタブを見て負荷の高いものを右クリックし、「優先度の設定」を「低」もしくは「通常以下」に変更するとよいでしょう。これにより、ほかのアプリケーションのほうがOSから見て相対的に優先度が高くなるため、たいていは普通の速度で動くようになります。

とはいえ、毎回起動するたびに優先度の変更を行なうのはかなりの手間です。インストールしたアプリケーションがデスクトップやスタートメニューにショートカットを作成しているのであれば、それを右クリックして設定を変更するとよいでしょう。ショートカットのタブにリンク先というのがあるので、その先頭部分に「cmd /c start /low 」を追加します。これで優先度が低で起動できるようになります。CPUの使用率は100%のままですが、ほかのアプリケーションへの影響はほとんどなくなるのでだいぶ楽になるはずです。

ツールで解消

無料で公開されている実行優先度自動設定プログラム「オートギア」というフリーソフトウェアを使うとCPU使用率100%ゲームへの対策が楽になります。「オートギア」を起動して「追加」を押して「参照」でゲームをインストールしたフォルダにあるゲームの実行ファイルを指定するか、ゲームを起動してから「一覧」で起動中のアプリケーション一覧から優先度を変更したいプログラムを選択。指定優先度を「低」もしくは「通常以下」にしましょう。そして「セーブ」を押して設定を保存。 このままでは毎回「オートギア」を起動した際に「ロード」しないといけないため、あまりにも使いにくいと思います。そこで、「オプション」にある「ファイル」で「オートセーブ」「オートロード」にチェックを付けて「OK」を押して設定を完了させましょう。これで自動的に保存と呼び出しが行なわれるようになります。「オプション」の「一般」にある「スタートアップにショートカットを作成します。」にチェックを付けておくとWindows起動時に「オートギア」が自動起動するようになってよいかも。そうすることで、優先度を変更したいアプリケーションが起動されるとそれを検出し、自動的に指定しておいた優先度へ変更してくれるようになります。Windows起動時の自動起動と組み合わせれば、お手軽に本来は重くてほかのアプリケーションと共存できないようなものも普通に使えるようになるわけです。

逆に使いたいアプリケーションの優先度を高くする設定を行なうという方法もあります。動画再生でのコマ落ちを避けるためにプレーヤー関係の優先度を高くするというのも「オートギア」の活用方法の一例といえるでしょう。

以下に本件に関連する役立ちそうなツールを列挙しておきます。今回紹介した方法ではしっくりと来なかった人はこれらのツールも試してみてはいかがでしょうか?

2007-12-06 (by 天城螢)

ゲーム

愛妻淫虐オークション〜借金返済に充てられて…〜

憧れのお母さん

イキジゴク

悪戯睡眠孕ませレイプ(同人)

妹と幼馴染みの性奴指導〜これ以上中に出すのはやめて!〜

(に)交姦(される兄)の会

淫交倶楽部

淫母乱乳相姦〜ボクの精子で、ママを一杯にしてあげる〜

ヴァルプルギス

おっぱい戦争〜巨乳VS貧乳〜

お姉ちゃんメイドのご奉仕タイム〜秘密なんだからね〜

思いっきり!精液大量注入!〜高飛車女をアヘらせろ!〜(同人)

オレの姉ちゃん。〜オレは姉ちゃんのオモチャじゃないっ!〜

女戦士セラスは踊り子に転職した!〜は、恥ずかしくて死んでしまいたいッ…エッチなダンスなんて誰がするか!〜

学園3〜華麗なる悦辱〜

籠の中の彼女

姦交バスツアー〜色情に染められた花嫁〜(同人)

姦獄学園〜学園公認、恥辱の課外授業〜

危険日狙って!?孕ませ学園(同人)

巨乳魔女

キラリ南国小麦色〜潮吹きパラダイスへようこそ!〜

軍人少女の子作り任務〜ハレンチな!…う、上官命令なら…貴方の精子で子宮を撃ち抜いてください!〜

このわたくしが…こんな触手で絶頂いくなんて! 〜触手びしょ濡れ高慢JK・杏珠(同人)

催眠コスプレ広場

催眠日記(同人)

JKと淫行教師3〜万引き少女編〜

JKと淫行教師4〜なまいきモデル少女編〜

じゅーしぃエイジ

娼母清華〜背徳の交わり〜

触囚の巫女〜禁じられた姉弟触手交歓〜

処女狩り〜ロリータ少女の極姦市街地〜(同人)

新婚寝取られ生活〜ごめんなさい、あなた。婚約、結婚、出産、ずっと私はおじさんに…〜

侵蝕3〜淫魔の生贄〜

すぷらっしゅ!-Splash!-

性器雇用〜製薬会社の新人狂育「一日一錠、わたし身も心も捧げます!」〜

性処理くらぶ2〜コスって伸びる新人教育〜

性癖操作〜こんなコト、大ッ嫌いなはずなのに…!〜(同人)

セックスライフ〜SEX LIFE〜

町内会主婦レイプ〜会合で酔わされて代わる代わる犯されました〜(同人)

でれ♥スク

天然巨乳ドジっ娘ナース!〜毎日甘エロッ! 中出し看護ライフ♪〜

奴隷島-Slave Island-(同人)

中出しスパイの挿入捜査〜子宮の平和は俺が守る!〜

贄妻〜夫に裏切られたワタシ〜

贄姫〜戦国姦落絵巻〜

肉獄のヘミ〜触髪と子宮蟲の快楽に堕ちたバウンティハンターレビアンナの運命について

のーぱんつ!!

ぱいずりチアリーダー VS 搾乳応援団!

HOUND〜獣欲の買収者〜

はなひらっ!(同人)

BUNNYBLACK

姫神さまが両親を人質に孕ませろと以下略。

姫剣士エステル〜孕ませ王2〜

ポヨポヨおっぱいさま〜

万引き、ダメ。絶対!!〜清楚な万引き女子・クラス全員2本挿し!ダブルω計画〜

未亡人 沙苗 「私が初めてでいいの……?」

女神とLOVE!〜5人の女神様とイチャハメ孕ませ新婚生活♪〜

もっと 姉、ちゃんとしようよっ!

野獣教師

浴衣の下は…〜神社で発見! ノーパン少女〜(同人)

楽園のルキア

らぶいも〜お兄ちゃんエッチしよ〜

LILITH-IZM05〜大量射精編〜


ALLゲーム記事一覧

△ ページ上部へ戻る △