Windowsの場合、CreateFile
APIを使用する必要があります。そのページと、最適化について言及しているページからのリンクをよく読んでください。バッファリングをオフにするために渡すフラグがいくつかあります。これは、過去に1秒あたり約800 MBでビデオを収集していて、その一部をRAIDアレイにできるだけ速く書き留める必要があったときに行いました。
さて、旗については-私はそれが主にこれらだと思います:
FILE_FLAG_NO_BUFFERING
FILE_FLAG_WRITE_THROUGH
読み取りには、を使用することをお勧めしますがFILE_FLAG_SEQUENTIAL_SCAN
、バッファリングをオフにすると効果がないと思います。
キャッシング動作のセクションをご覧ください
あなたがしなければならないことがいくつかあります。まず、常にセクターサイズの倍数のデータ量を書き込む必要があります。これはほぼ普遍的に512バイトです(または少なくともそうでした)が、将来的には最大2048バイトを検討することをお勧めします。
次に、メモリもそのセクターサイズに合わせる必要があります。_aligned_malloc()
必要以上のバッファを使用するか、単に割り当てて手動で調整することができます。
他のメモリ最適化の懸念があるかもしれません、そしてあなたは個々の書き込み操作をメモリページサイズに制限したいかもしれません。私はその深さに決して入りませんでした。それでも、ディスクの制限に非常に近い速度でデータを書き込むことができました。stdio呼び出しを使用するよりも大幅に高速でした。
バックグラウンドでこれを行う必要がある場合は、オーバーラップI / Oを使用できますが、正直なところ、私はそれを理解していませんでした。ビデオバッファの書き込み専用のバックグラウンドワーカースレッドを作成し、外部で制御しました。