0

ファイルをロードするプログラムを作成しましたが、同じファイルの最初のロードよりも 2 回目以降のロードの方が速い理由を誰かが説明できるのではないでしょうか?
例:
1. 大きなファイル (500MB) を初めてロードする場合、同じファイルをその後ロードするよりも時間がかかります。2回目にファイルをロードするときは、わずかな時間しかかかりません。
これは、その間に RAM の使用量が低下した場合でも当てはまります (この動作は、プログラムを再起動したときにも表示されます)。

2. PC を再起動したり、しばらくしてからプログラムを実行したりファイルをリロードしたりしないと、状況 #1 が再び発生します。

環境:

  • C++
  • VS 2010 (MFC)
  • Windows XP ホーム 32 ビット
  • ファイルの読み込み: fread() などを試しましたが、すべて同様の結果になります。

洞察をありがとう。

4

4 に答える 4

5

オペレーティングシステムは、未使用のメモリにファイルをキャッシュします。ウィキペディアを参照してください。これは、再起動後、大量のメモリを使用した場合、またはさらに多くのファイルを開いた場合に消えます。詳細は、オペレーティングシステムによって異なります。

現代のコンピュータアーキテクチャのより広い概要については、ハーブサッターによるこの講演は良いです。

于 2013-03-14T22:10:34.133 に答える
1

考えられる理由の1つは、ハードドライブにキャッシュがある可能性があることです。初めてファイルを読むときは、プラッターから直接読んでいます。次回、ドライブはキャッシュからそれを提供できます。遅延(または再起動)後、ファイルの内容はキャッシュに存在しなくなるため、プラッターから再び提供されます。

于 2013-03-14T22:10:35.347 に答える
1

最新のオペレーティング システムでは、「未使用のメモリ」などはありません。それは完全な無駄になります。OS が行うことは、ファイル、ディレクトリ構造、ファイル メタデータ (特定のファイルのデータがディスク上のどこにあるかなど)、およびその他の有用なデータのコピーを「未使用」メモリに保持することです。

したがって、ファイルを読み取ると、メモリにロードされます。十分な「未使用」メモリがあると仮定すると、そのファイルは実際に長時間そこに留まります。コンピューターの通常の使用では、電子メール ソフトウェア、Web ブラウザー、ファイル コンテンツ インデクサー、アンチウイルス スキャナー、ネットワーク タイム シンクロナイザー、アドレス帳から携帯電話へのシンクロナイザー、およびその他すべてのバックグラウンド コードが使用されているため、最終的にはおそらく追い出されます。システムで実行され、これらすべてが「未使用」のメモリを少し使い果たします。

はい、ファイルはキャッシュされます。4 GB または 8 GB の RAM を搭載し、その RAM をすべて使用していないシステム内の 500 MB のファイルは、数分、数時間、さらには数日間、そこに留まる可能性があります。

于 2013-03-14T23:33:13.000 に答える
0

最近のほとんどのハードドライブにはキャッシュがあるため、一度ロードすると、キャッシュに保存されます。ただし、ファイルを2回以上ロードしたくない場合があります。

于 2013-03-14T22:10:46.590 に答える