2011-01-01 53 views
6

最近、MSDNのFILE_FLAG_NO_BUFFERINGフラグについて詳しく説明し、WindowsのバッファリングされていないI/Oに関するいくつかのGoogle検索結果を読んでいます。FILE_FLAG_NO_BUFFERINGを使用すると、速度が大幅に向上しますか?

http://msdn.microsoft.com/en-us/library/aa363858(v=vs.85).aspx

私が今思って、それはファイルI/Oプログラミングのバッファなしのオプションを検討することが本当に重要なのですか?多くのプログラムでは古いCストリームI/OまたはC++ iostreamが使用されていますので、以前はFILE_FLAG_NO_BUFFERINGフラグに注意を払っていませんでした。

Picasaのようなフォトエクスプローラプログラムを開発しています。バッファなしI/Oを実装すると、サムネイルの表示速度が一般ユーザーの目に見える差異を示す可能性がありますか?

+0

+1両方の回答に、ありがとうございます!私は、私の古いフォトエクスプローラプロジェクトで、バッファリングされたバッファリングされていないファイルの読み込みをテストしました。それは逐次読まれたシナリオなので、劇的な遅さはなく、顕著なスピードも見いだせません。 – 9dan

+0

私はそれがバッファリングされていないファイルI/Oがエンドユーザアプリケーションと何も関係していないことを保証できると思います。 – 9dan

答えて

7

いいえ、このフラグは一般的なディスクユーザーには該当しません。最適なパフォーマンスのために独自のファイルキャッシュ管理を実行する必要のあるデータベースなどのプログラム用です。私はあなたのプログラムをスピードアップする状況を見つけることができると確信していますが、大部分はOS提供のバッファリングを使いたいと思っています。それがその理由です。

+1

私は同意しなければなりません。 40GBのファイルを、OS提供のバッファリングを使用してサーバー間でコピーしてください。サーバーのメモリが不足してクロールされます。生産が非常に悪い。サーバー間で大規模なデータベースファイルを扱う場合は、このフラグを使用する必要があります。 – Brain2000

+2

@ Brain2000:あなたはどういう意見に同意していますか?私は「最適なパフォーマンスのために独自のファイルキャッシュ管理を実行する必要があるプログラムのためのものです」と述べ、そのようなプログラムの例を提供しました。あなたは私のことに実際に同意するように聞こえる。 – Gabe

+0

キャッシュを無効にすることが「自分のファイルキャッシュ管理を実行する」に該当する場合は、はい、同意します。 – Brain2000

11

Oh Lord no。あなたは、そのフラグを使用することによってそれを劇的に遅くする。これは、ファイルシステムのキャッシュをバイパスします。これは、Nを読み込んだ後にセクターN + 1を読みたいと思う精神的な正確さで推測できる素晴らしいコードです。ちょうどそれが安ければ、あらかじめロードしておきます。

これは、オプションが存在する理由で、書き込みのために特に悪いです。あなたは遅延書き込みを取得しません。つまり、あなたのプログラムは、ディスクが書き込めるように速く動かすことができます。それは非常に、非常に遅いです。旗の利点は、それが書かれたことを確信できることです。 dbaseエンジンが気にするトランザクションディスク更新を実装するのに役立ちます。

しかし、これを試してみてください。

関連する問題