プログラムをロードすると、Windows はそれを実行するために実行ファイルをメモリにコピーする必要があります。 アプリケーションを閉じても、プログラムは RAM に存在します。 プログラムを再び実行する場合、Windows はディスクから何もロードする必要がなく、すべて RAM 内にあることになります。 ディスクは RAM よりも 6 桁も遅いので、プログラムやデータ ファイルの多くは RAM に保存しておきたいものです。 未使用の RAM はキャッシュになります。 それがスタンバイ・メモリです。 スタンバイ メモリは、それを必要とするアプリケーションにすぐに提供されるのではなく、内容が必要になった場合に備えて待機しているメモリです。

  • https://i.imgur.com/NQwFGoB.png

つまり、今私のコンピューターには、ハード ドライブのキャッシュとしてしか機能していない 8GB のメモリがあるのです。 しかし、プログラムにメモリを渡す前に、まずメモリをゼロにする必要があります。

Reader Quiz: なぜ Windows は、他のプロセスにメモリを渡す前に RAM をゼロにしなければならないのでしょうか。

Windows は、遅延ゼロにされたいくつかのメモリを保持し、いつでもアプリケーションに渡せるように準備しています。 リソース マネージャーでは、このゼロになったメモリは *Free memory と呼ばれ、上のスクリーンショットのように表示されます。

SuperFetch はメモリ マネージャーと連携して、積極的かつ遅延的にデータを空きメモリにロードし、実行時にすでにキャッシュされているようにします。 SuperFetch は、あなたが通常読み込むアプリケーション、ゲーム、開発ツールを認識し、それらが必要とされる場合に備えて RAM に遅延的に事前フェッチします。 RAMMap のようなツールを使用して、コンピュータの RAM が現在キャッシュしているファイルを確認することができます。

  • Standby Free Memory
  • Zerod Free Memory

そしてその人は、意図的に自分のコンピューターを遅くしているので、後頭部を叩く必要があるのです。

Application use memory; not RAM

Another thing that most people don’t understand is the difference between committed and working set. これは、Windows 95 が 4 MB のメモリで動作していた時代には理解しやすかったのですが、

  • RAM 16 MB のモンスター マシンで
  • 1.5 GB のメモリを割り当てたプログラムがあっても
  • RAM の 117 KB しか使っていません

これは、プログラムが動作に必要とするすべてが 117 KB で完全にフィットすることが原因なのです。 残りはスワップ ファイルに書き込まれたか、すでにファイルのコピーでした (たとえば、1.5 GB のデータ ファイルを自分のアドレス空間にマップし、RAM をまったく消費せずに 1.5 GB のメモリを割り当てた場合など)

たとえば、Windows Vista/7 サイドバーのガジェットの 1 つはメモリ リークが発生しました。 これは、Sidebar.exe プロセスがメモリ不足でクラッシュするまで、(32 ビット プロセスの制限である 2GB まで)メモリをコミットし続けることを意味します。 しかし、Sidebar.exe は 700 KB の RAM しか消費しませんでした。リークされたメモリはすべてスワップ ファイルに書き出されたからです (誰もそれを何かに使用しなかったからです)。 Window は RAM のページをハードディスクにコピーすることができます。 RAM のページが実際に使用されていない場合、そのデータのバックアップ コピーがスワップ ファイルにあるため、他のもの (ディスク キャッシュなど) に再利用することができます。 もし、sidebar が再びそのメモリを要求した場合 (それは決してない、なぜなら忘れているから)、Windows はハード ドライブからそれらの RAM コンテンツをスワップして戻すことができます。5 GB のメモリの空き:

  • 8 GB は、私のマシンをより速くするために何か役に立つことをしています
  • 0.5 GB は何もしないことで無駄になります

あなたは SuperFetch がメモリを使い切ることを望んでいます – マシンがより速くなるのですから。

この人たちは私の父と同じです。 彼は自分が危険なだけの知識を持っていると考えている。 彼は、自分のWindows 7マシンが起動するのに3分かかると文句を言いながら電話をかけてきました。 私は彼にこう言いました:

  • それは彼が実行しているすべてのアンチウィルスのせいだ
  • SSD を手に入れろ、13 秒で起動する

彼は SSD を入手し、Windows はまだ起動に 3 分かかると言いました。 アンチウィルスのせいだと言ってやったよ。 私の意見を頭ごなしに否定する。

SuperFetch を無効にすることは、スワップファイルを無効にしたり、RAM Doubler をインストールしたり、レジストリクリーナーを使用したりするのと同じです:それはあなたが馬鹿に見えるようになります。 直接会うと、私は微笑んでうなずきます。 陰ではredditであなたの悪口を言っています。

Bonus Reading

More on the subject before:

  • /r/ProgrammerHumor/comments/68ker6/ultimate_in_garbage_collection/dh071ep/
  • /r/technology/comments/1xbofp/ramdrive_to_improve_performance_and_prolong_ssd/cf9wbmf/
  • /r/programming/comments/4nvimz/john_carmack_on_memory_mapped_gpu_assets/d4818ep/

Update -。 SuperFetchのハードディスクドライブのI/Oは、私のゲームに悪影響を及ぼさないのでしょうか?

誰かが質問し、私が回答しましたが、視認性と情報の普及のためにここにコピーします。

本当に、ゲームのパフォーマンスに影響するでしょうか。 そして、このすべてのハード ドライブ I/O は、ゲームをプレイするために必要な「実際の」ハード ドライブのデータを損傷します。

それはありません。 Windows 7 には、アプリケーションが「バックグラウンド」優先で I/O 処理を実行することを示す機能が追加されました。

  • SSD の応答時間は約 1 ~ 2 ms
  • 回転プラッター HDD の応答時間は約 10 ~ 20 ms

そこで、リソース モニターでハードドライブ I/O サービスにどのくらい時間がかかるか確認することができました。 回転している HDD では、通常 10-30ms と表示されます。

  • https://i.imgur.com/m4ogUc5.png

ただし、この間、他のハードドライブ I/O 操作がバックグラウンド優先で実行されています。 Windows は、バックグラウンド I/O 操作が決して通常の I/O を妨げないようにします。 バックグラウンド I/O は、1 つのバックグラウンド読み取りをサービスするのに500 ~ 1000 ミリ秒かかるほど罰せられます:

  • https://i.imgur.com/3SATs9M.png

それで、私たちはこうなります。

ReadResponse timeSSD1 msHDD10 msBackground Priority I/O500 ms

Background I/O Priority について知らない開発者がいるのは残念です。net updater

  • Windows Update(!!)
  • 本当に助かるから。

    コメントを残す

    メールアドレスが公開されることはありません。