プログラムをロードすると、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(!!) 本当に助かるから。