4

同僚のためにダウンロード ライブラリを作成しました。ダウンロードしたデータをファイルに書き込みます。

私の同僚は、100 Mb のデータがダウンロードされたとしても、ファイルが長時間小さいままであることを発見しました。

したがって、これらのデータをバッファリングするためにメモリを消費しないようにflush()、毎回呼び出す必要があることを示唆しています。write()

しかし、私は 100 Mb の仮想メモリが多くあるとは思いませんし、おそらく Windows には大量のデータをバッファリングする理由があると思います。

あなたはそれについてどう思いますか?

4

5 に答える 5

4

個人的には、オペレーティング システムが適切に調整してくれると信じています。

「電源が切れてもデータを失わないようにすぐにフラッシュする」については、ファイルの途中で電源が切れた場合、書き込んだデータに問題がないと信じて、そこからダウンロードを再開しますか? もしそうなら、早い段階でフラッシュする価値があるかもしれませんが、電源障害の相対的なまれ性と再開の複雑さを比較検討し、すべてを読み取ったらファイルを閉じます。半分書き込まれたファイルが表示された場合は、そのファイルを削除して、最初からダウンロードし直してください。

于 2009-09-11T11:58:32.507 に答える
4

まず、何が起こっているのかを調査/デバッグする必要があります。問題は別の場所にある可能性があります。たとえば、Windows エクスプローラーでは、ファイル サイズが十分に高速に更新されない場合があります。

そうは言っても、一般的に、OS の VM システムが RAM にバッファリングすることを決定した場合、それには十分な理由があり、通常は干渉すべきではありません。結局のところ、空きメモリがたくさんある場合は、それを使用するのが理にかなっています。

于 2009-09-11T11:06:22.923 に答える
2

書き込みごとにフラッシュするのではなく、特定の間隔/サイズ/行でフラッシュする方が良い場合があります。これにより、メモリ フットプリントが削減され、実際のファイルが定期的に情報で更新されるようになります。たとえば、100 行ごとにフラッシュできます。

于 2009-09-11T11:15:53.153 に答える
2

私だったら、すべてのデータが揮発性のない場所にできるだけ早く保存されるようにしたいと思います。電源障害が発生した場合に何も失わないように、ストリームを確実にフラッシュします。後でデータにアクセスする必要があるかどうかは指定しませんでしたが、あると思います。そうでなければ、なぜデータを保存したいのでしょうか? ただし、元の質問に答えるには、OS に「有害」ではありませんが、データを失うリスクがあります。

于 2009-09-11T11:05:46.127 に答える
0

パフォーマンスへの影響を無視してメモリ要件を削減する手段がある場合は、あまり欲張らないバージョンをお勧めします。もっと重要なことのためにそのメモリが必要になるかもしれません.100Mbのフットプリントはダウンローダーにとってかなり巨大です.

于 2009-09-11T11:11:20.573 に答える