CreateFile ReadFileの組み合わせを使用して同じことを行う上で、メモリマップされたファイルを読み込む(通常のサイズのファイル)の欠点は何ですか?ファイルのメモリマッピング対CreateFile/ReadFile
答えて
ファイルの読み込みと読み込みだけでなく、ファイルマッピングを確立するためには、より複雑なコードが必要になります。ファイルマッピングは、ファイルのセクションへのランダムアクセスを目的としています。必要がない場合は、ファイルマッピングを気にしないでください。
また、コードを別のプラットフォームに移植する必要がある場合は、ファイルマッピングを使用しないと、はるかに簡単で高速に処理できます。
ReadFile/WriteFileでは、決定論的なエラー処理のセマンティクスがあります。メモリマップファイルを使用すると、例外がスローされ、エラーが返されます。
さらに、メモリマップされたファイルをディスクに(またはさらに悪いことに)ネットワークに接続する必要がある場合、メモリの読み込みには数秒(または数分)かかることがあります。アプリケーションによっては、予期しないストールが発生する可能性があります。
ReadFile/WriteFileを使用する場合は、この動作を制御できるようにAPIの非同期バリアントを使用できます。
特に、I/Oパターンが予測可能な場合は、ReadFileを使用するとより決定性の高いパフォーマンスが得られます。メモリマップドI/Oはランダムな場合が多く、ReadFileはほとんど常にシリアルです(ReadFileは現在のファイル位置現在のファイル位置を進める)。
ファイルマッピングの大きな利点は、システムキャッシュに影響しないことです。アプリケーションがReadFileを使用して過剰なI/Oを実行すると、システムキャッシュが大きくなり、ますます物理メモリが消費されます。お使いのOSが32ビットで、メモリが1GBを超える場合は、32ビットWindowsではシステムキャッシュのサイズが1GBに制限されているため、幸いです。そうしないと、システムキャッシュは使用可能なすべての物理メモリを消費し、メモリマネージャはすぐに他のプロセスのページをディスクにパージし始め、実際にディスクを減らすのではなくディスク操作を強化します。この効果は、キャッシュサイズが利用可能な物理メモリによってのみ制限される64ビットWindowsでは特に顕著です。一方、ファイルマッピングはシステムキャッシュの過度な成長につながることはなく、同時にパフォーマンスを低下させることもありません。
- 1. メモリマッピングされたファイルはBufferedStreamより速いでしょうか?
- 2. 実行可能ファイルのDLLメモリマッピングまたはアドレス空間割り当て
- 3. 大きなファイル(100GB)チャンクでメモリマッピングを使用してチャンクで読む
- 4. C++/C#interopでのメモリマッピングとP/Invokeのパフォーマンス
- 5. Cでメモリマッピングを使用してバイナリファイルを読み取る
- 6. OpenCLでメモリマッピングが成功したことを知る方法
- 7. ファイルへのSLF4Jのログ対DB対Solr
- 8. 分割が2GBの場合のLinuxのメモリマッピング:1GBではなく2GB:3GB
- 9. 相対ファイル
- 10. Odexファイル対デックスファイル
- 11. ストーリーボード対Xibファイル
- 12. GDB:実行後にメモリマッピングが変更されるのはなぜですか?
- 13. ファイルUriスキームと相対ファイル
- 14. git:ファイルの絶対パスをレポに対して相対
- 15. ERBファイル内の相対ファイル名
- 16. Thymeleaf:cssファイルの絶対参照
- 17. のhtaccessファイル参照、相対
- 18. 設定ファイルの相対パス
- 19. Ant NetBeansプロジェクトの対象ファイル
- 20. バイナリを読み込むためにCでメモリマッピングを使用する
- 21. 「ファイルシステム内のファイルと1対1の対応」
- 22. AMD Intelプロセッサ対実行ファイル
- 23. ViewController対Nibファイルなし
- 24. ファイルに対するdiffコマンド
- 25. Logstash相対ファイルパスエラーWindowsファイル
- 26. htaccessリダイレクト発行フォルダ対ファイル
- 27. クラウドファウンドリー:WARファイル対春ブーツ
- 28. 監視対象ファイルに対するwebpackカスタムコマンドの変更
- 29. ELFファイルの共有ライブラリの絶対パス
- 30. スケジュール対象の実行中のファイル