大きなファイル (2.5GB) をスキャンして文字列を抽出し、数百のファイルのサブセットに書き込むプロジェクトがあります。
通常のバッファリングされた書き込みを使用するのが最も速いでしょうが、
- ファイルハンドルがなくなるのが心配です。
- ファイルの書き込み中にファイルの進行状況を監視できるようにしたい。
- プロセスが中断された場合の損失をできるだけ少なくしたいと考えています。不完全なファイルはまだ部分的に役立ちます。
代わりに、読み取り/書き込みモードで開き、新しい行を追加して、もう一度閉じます。
これはほとんどの場合十分に高速でしたが、特定の OS ではこの動作が深刻な悲観論であることがわかりました。前回 Windows 7 ネットブックで実行したときは、数日後に中断しました。
非常に多くのファイルを開いたままにし、それぞれ非常に多くの書き込み操作の後にフラッシュする、ある種の MRU ファイルハンドル マネージャーを実装できます。しかし、これはやり過ぎですか?
これは一般的な状況であるに違いありません。「ベスト プラクティス」や「パターン」はありますか?
現在の実装は Perl であり、Linux、Solaris、および Windows、ネットブックからファット サーバーで実行されています。しかし、私は一般的な問題に興味があります: 言語に依存せず、クロスプラットフォームです。C または node.js で次のバージョンを作成することを考えています。