World of Tanksでの地図の読み込みを高速化



私のコンピューターでは、WoTのカードが非常に長い時間(1分以上)読み込まれることに気付きました。 あなたが入って来て、それが起こって、戦闘に入ります。彼はすでに30秒間戦っています。 そして時には、燃えている破片の形で戦車を見つけることさえあります。 私のコンピューターはもちろん古く、長い間アップグレードを求めてきましたが、最初はプログラムで何かを試してみることができます。



そのため、最初にすべきことは、ブレーキの原因を特定することです。 容疑者のリストは、原則として、それほど大きくありません。

私たちは対立に直面して運用上の検索活動を開始します。 Sysinternalsの優れたProcess Monitorユーティリティを使用して起動し、worldoftanks.exeプロセスの監視をフィルターに追加して実行します。 ゲームを開始し、戦闘を開始し、マップがロードされるのを待って、監視結果を確認します。



スクリーンショットからわかるように、CPU、メモリ、およびネットワークの負荷は最大にはほど遠いです。 しかし、HDDのロードスケジュールは非常に不均一で、ピークとディップがあります。 もっと詳しく見てみましょう。 「ツール->ファイルの概要...」をクリックします。 ビンゴ! ここでは、大量の入出力操作(正確には70 602個)を確認できます。



ダウンロード中に読み込まれるデータの合計量は約450 MBで、ファイル操作の操作時間は50秒以上です。 そのため、マップの読み込み時間のほとんどを占めるのはファイル操作です。 驚くことではありません-WoTには、よく発達したマップ、戦車のモデル、あらゆる種類の家\木\石があります。 450 MBの読み取りデータは、これらすべてに十分な価格のようです。 しかし、どうすれば起動時間を短縮できますか? 結局のところ、このデータはすべてゲームでまだ読み取る必要があります。 ファイル操作を高速化するための古い実証済みの方法-RAMディスクがあります。 しかし、ここに問題があります-額にそれを適用しても機能しません。 ゲームには11 GBが必要で、私のマシンでは4 GBのRAMしかありません。 つまり、11 GBのRAMディスクを作成してゲーム全体を配置したとしても、物理法則とオペレーティングシステムを欺くことはありません。ディスクは作成される可能性がありますが、そのデータは使用したくない同じハードディスクにスワップされます。 オプションではありません。



深く掘り下げてみましょう-どのファイルにアクセスするのに最も時間がかかるかを見てみましょう。 「フォルダ別」タブを開き、次の図を参照してください。



ほとんどのリソースには、%World_of_tanks%\ resフォルダー内のファイルにアクセスしてアクセスします。 ここでは、次のサブフォルダーを選択できます。

これらのフォルダーのいくつかからファイルをメモリに入れることができれば、マップのロードははるかに高速になります。 たとえば、オーディオフォルダーとスペースフォルダーのRAMファイルに配置すると、619 MBのRAMのコストで21秒の時間を獲得できます-悪くはありません。 しかし、これは額ではうまくいきません-そのリソースの一部がここにあり、そこにあることをどのようにゲームに説明できますか? この時点で、私はすでにハルコネン精神でハードコアをヒットしたかったのです。

  1. 必要なファイルをメモリにロードします
  2. 一部のMicrosoft DetoursまたはApiHijackを使用して、Worldoftanks.exeプロセスでCreateFile、ReadFile(および他の何か)関数を接続します。
  3. フックでは、WoTが読み取ろうとしているファイルを判別します。 私たちのものの場合-メモリからデータを与え、残っている場合-ファイルの入出力の実際の関数に呼び出しを転送します。


しかし、残念ながら、うまくいきませんでした。アイデアが思いついたので、何回も簡単にできるようになり、すべてが台無しになりました:)。 アイデアは、この場所で* nix-systemsのユーザーになれればいいということです。ここには、どこにでも何でもマウントできる素晴らしいマウントコマンドがあります。 Windowsではこれはそうではありません...またはそれですか? いくつかのあいまいな記憶が意識の周辺に浮かんでいたので、私は情報を求めて頭とGoogleに手を伸ばしました(Googleの人がついに頭の中で検索をしたとき-とても怠somethingでした!)。 Windowsで使用できるものは次のとおりです。



したがって、最終的なアルゴリズムは次のようになります。

  1. RAMドライブ(たとえば、 このリストから)を取得します。 これを取った。
  2. キャッシュに割り当てることができるRAMの量を考えます。
  3. RAMドライブ上のゲームリソースでフォルダーを書き換えます(元のフォルダーの名前を変更します-まだ必要です)。
  4. Junctionを使用して、Ramdrive上のフォルダーをゲームのリソースフォルダーにマウントします。 このようなもの:

    「ジャンクションD:\ゲーム\ World_of_Tanks \ res \オーディオr:\オーディオ」
  5. ゲームを開始して楽しんでいます。
ちなみに、これらのすべてのポイントは、1つのバッチファイルで実装できます。



もちろん、この問題全体では、RAMドライブ上のファイルのボリュームがOSがスワッピングを使用することを決定するほど大きくならないように、無理をしないことが重要です。 しかし、ここで私に起こったことがあります:



RAMドライブ上のフォルダー内のファイルにアクセスする時間がほぼゼロになり、カードの読み込みが非常に速くなりました。カウントダウンの開始前に頻繁に表示され始め、戦闘の開始前にいくつかのフレーズを仲間とやり取りしました。 一般的に、私が望んでいたこと-私は達成しました。 ゲームの奥深くを掘り下げてフックを使用する機会がなかったことは残念ですが、私の方法はWoTライセンス契約にも違反していません。これも重要です。



All Articles