15

CreateFile ReadFileの組み合わせを使用して同じことを行うよりも、メモリマップトファイルを使用して(通常のサイズのファイル)を読み取ることの欠点(ある場合)は何ですか?

4

3 に答える 3

13

ReadFile / WriteFileを使用すると、決定論的なエラー処理セマンティクスが得られます。メモリマップトファイルを使用する場合、例外をスローすることでエラーが返されます。

さらに、メモリマップトファイルがディスク(またはさらに悪いことにネットワーク)にヒットする必要がある場合、メモリの読み取りが完了するまでに数秒(または数分)かかる場合があります。アプリケーションによっては、これにより予期しないストールが発生する可能性があります。

ReadFile / WriteFileを使用する場合は、APIの非同期バリアントを使用して、この動作を制御できます。

また、ReadFileを使用すると、特にI / Oパターンが予測可能な場合、より決定論的なパフォーマンスが得られます。ReadFileはほとんどの場合シリアルであるため、メモリマップドI / Oはランダムであることがよくあります(ReadFileは現在のファイル位置を読み取り、現在のファイルを進めるため)ポジション)。

于 2009-03-15T00:29:16.330 に答える
3

ファイル マッピングの大きな利点は、システム キャッシュに影響を与えないことです。アプリケーションが ReadFile を使用して過度の I/O を行うと、システム キャッシュが増大し、物理メモリがますます消費されます。OS が 32 ビットで、メモリが 1GB をはるかに超える場合、幸運なことに、32 ビット Windows ではシステム キャッシュのサイズが 1GB に制限されているためです。そうしないと、システム キャッシュが利用可能なすべての物理メモリを消費し、メモリ マネージャーがすぐに他のプロセスのページをディスクにパージし始め、ディスク操作を実際に減らす代わりに強化します。この効果は、キャッシュ サイズが使用可能な物理メモリによってのみ制限される 64 ビット Windows で特に顕著です。一方、ファイル マッピングは、システム キャッシュの過大化につながることはなく、同時にパフォーマンスを低下させることもありません。

于 2009-11-12T05:10:19.690 に答える
2

ファイル マッピングを確立するには、単に開いて読み取るだけではなく、より複雑なコードが必要になります。ファイル マッピングは、ファイルのセクションへのランダム アクセスを目的としています。それが必要ない場合は、ファイル マッピングを気にしないでください。

また、コードを別のプラットフォームに移植する必要がある場合でも、ファイル マッピングを使用しないと、はるかに簡単かつ迅速に行うことができます。

于 2009-03-13T06:08:38.377 に答える