2009-03-13 6 views

答えて

2

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

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

13

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

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

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

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

2

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

関連する問題