std::fstream を使用して、画像のストリームをハードディスクに書き込んでいます。ほとんどのハード ディスク ドライブには 32MB のキャッシュがあるため、バッファーを作成して最大 32MB の画像データを蓄積してからディスクに書き込む方が効率的ですか、それともすべての画像をディスクに書き込むだけの方が効率的ですか?
質問する
993 次
2 に答える
2
キャッシュは、キューイングによる問題を軽減するための読み取り/書き込みキャッシュとして使用されます.. ディスクに関する私の経験は次のとおりです。
- ディスクが SSD でない場合は、ファイルをシークするよりも、シリアルに書き込むほうがよいでしょう。シークは I/O パフォーマンスのキラーです。
- 通常、ディスクはセクター サイズで書き込みます。セクター サイズは通常 512b または 4k (新しいディスク) です。一度に 1 セクタずつデータを書き込むようにしてください。
- バンチング I/O は、複数の小さな I/O よりも常に高速です。単純な理由は、ディスク上のプロセッサがフラッシュするキューが小さいためです。
- 記憶から提供できるものは何でも提供してください。必要な場合にのみディスクを使用してください。信頼性ポリシーに応じて、書き込み時にキャッシュ エントリの変更/無効化をいつでも実行できます。スワップしないことを確認してください。そのため、メモリ キャッシュ サイズはまず妥当なものでなければなりません。
- この I/O 管理を行っている場合は、OS のページ キャッシュでダブル バッファリングしないようにしてください。これにはO_DIRECT。
- 信頼性が問題にならない場合は、ノンブロッキングを使用してください。O_NONBLOCK
于 2012-06-12T14:14:31.037 に答える
0
システムのすべての部分はfstream
、ディスク ドライバーに至るまで、特定の効率について、アプリケーションがアクセスできる以上のことを知っています。
試してみても、さまざまなバッファリング スキームを改善することはできなかったので、気にしないでください。
于 2012-06-12T14:20:22.677 に答える