web-dev-qa-db-ja.com

Windows、なぜ8GBのRAMは数MBのように感じるのですか?

私は4コアのInteli7と8GBのRAMを搭載したWindows7 x64を使用していますが、最近、コンピューターの「RAM」がハードドライブにのみ配置されているように感じます。

タスクマネージャが表示する内容は次のとおりです。

Task manager screenshot

リスト内のプロセスによって使用されるメモリの合計量は、約1GBです。そして、私のコンピューターで数日間起こっていることは、1つのプログラム(Cataloger.exe)が大量のファイル(それぞれ5〜10 MB近く)を継続的に処理し、カタログ化の目的でそれらを繰り返し開いたり読み取ったりしていることです。しかし、それはメモリ内であまり大きくならず、そのサイズ、100MBのままです。ただし、たとえば30分で処理されるデータの量は、ギガバイト単位で測定できます。

だから私の推測では、Windowsファイルのキャッシュはそれと関係があると思いました。そして、このトピックについて調査した後、コンピューターのRAMに詳細情報を表示するRamMapと呼ばれるこのプログラムに出くわしました。スクリーンショットは次のとおりです。

RamMap screenshot

したがって、私には、WindowsがRAM不要になった大量のデータを保持し、ハードドライブ上のページファイルにRAM割り当て要求をリダイレクトするように見えます。 。Cataloger.exeを閉じても、RamMapはマップされたファイルのサイズを長い間ほぼ同じと報告します。これはこの特定のプログラムだけではありません。以前、他のファイルとの大規模なファイル操作の後に同様の速度低下が発生したことに気付きました。したがって、これはCataloger.exeの例外的な動作ではなく、過去に何度も問題が発生しました。

それが何であれ、それはコンピュータを50倍ほど遅くします。 Chromeで新しいタブを開くには20〜30秒かかり、新しいプログラムを開くには最大1分かかる場合があります。速度が低下するため、一部のプログラムがクラッシュすることもあります。

では、ファイルのキャッシュやその他の場所に問題が隠れていると思いますか?どうすれば解決できますか?

7
Desmond Hume

これはいつものようにビジネスであり、すべてが正しく機能しています。 Windowsは他のデータよりもメモリ内にキャッシュされたファイルを保持していません-キャッシュされたファイルは、ある時点で、Windows hadがそれらをメモリにロードしたり、ディスクから読み取ったりすることを意味しますが、優先度の高いものはありませんその時からずっと。コンピュータの使用を再開し、プログラムがメモリを要求するとすぐに、Windowsはキャッシュされたファイルを削除して空き容量を増やします。

RAMMapを見ると、キャッシュされたファイルのほとんどが「スタンバイ」の下に割り当てられていることがわかります。つまり、Windowsが過去に必要としていたため、メモリに保持されており、再度必要になる可能性があり、非常に喜んで破棄されます。他の何かの場合実際にスペースが必要です。

基本的に、ここに表示されているのは、プログラムが大きなデータファイルのロードを要求しているため、Windowsがそれをメモリにロードすることです。メモリの管理は非常に複雑なプロセスであり、ここでWindowsが実行していることは、判断を下すことです。現在のプロセスを調べて、Chromeが5GBのメモリ(多く)を使用していることを確認します。タブの!)、しかし、そのメモリのほとんどは、過去1時間に触れられていません。この時点で、選択肢があります。Chromeをメモリに残すことができ、ファイルをキャッシュすることはできません。これは、Catalogerプロセスがファイルを処理するのに数分ではなく数時間かかる可能性があることを意味します。特に、ファイル内を頻繁に飛び回っている場合はそうです。または、chromeタブをページアウトして、Catalogerファイルをメモリにロードし、そのプロセスをすばやく終了することもできます。

これで、Windowsがchromeをメモリにページングしなければならないときに苦痛を感じるでしょうが、Windowsはそれを要求するまで(つまり、chromeをフォアグラウンドに戻すまで)それを行いません。そして、ページアウトされたタブを選択します)、そして最終的にあなたが評価する必要があるのは、その痛みがカタログ作成タスクのメモリを待たなければならない痛みよりも大きいか小さいかです。プログラムをサービスとして実行し、応答性を最適化するようにWindowsに指示するか、プロセスの優先度を下げてみることができますが、Catalogerプロセスをできるだけ早く終了することが必要だと確信しています。ディスクI/Oが最大になり、システム全体が非常に遅くなります。ディスクI/Oを必要とするものはすべてキューに入れられます(Webブラウジングでも-使用するキャッシュがあります!)。プログラムは遅く開き、新しいタブは速く開きますが、実際に何かにそれらを使用すると遅くなります。


プログラムがファイルを次々と順番に読み取り、再度それらに触れない場合は、Windowsがファイルをキャッシュする必要がないことに同意します。ここでの問題は、Windowsがそれを認識していないことです。なぜなら、キャッシュする必要がないと誰も言っていないからです。

Catalogerプログラムのソースコードにアクセスできる場合(または変更を要求できる場合)、FILE_FLAG_NO_BUFFERINGでファイルを開くように構成できます。これにより、Windowsはによって開かれたファイルのディスクキャッシュをスキップします。この方法でプログラム。

それがオプションでない場合は、Catalogerプロセスhasをシステムで実行しない限り、使用されていない予備のコンピューターがあるかどうかを確認し、使用できるかどうかを確認します。これらのファイルをカタログ化するための専用マシンとしてセットアップする必要があります。まだ存在しない場合は、単にRAMを増やすことも別のオプションかもしれません。最近のメモリ価格はかなり安く、開発者はこれを知っています-ほとんどのものはメモリを犠牲にして速度と応答性のために最適化されています。 8GBは以前のものではありません。

もう1つのオプションは、使用するすべてのファイルを別のハードドライブに移動し、特にそのドライブのディスクキャッシュをオフにすることです。

11
Darth Android