-1

長時間 (数時間) にわたって実行され、定期的に出力をテキスト ファイルに書き込むプログラムがあります。

ファイルへの書き込みに TextWriter 実装を使用しようとしていますが、操作中ずっとファイルを開いたままにしておくと問題が発生する可能性があるのではないかと心配しています。

最初の質問: ファイルに対してストリームを長時間開いたままにしておくと、パフォーマンスの問題 (またはその他の種類) が発生しますか?

その場合、StreamWriter (File Name コンストラクターで開かれる) は、定期的にバッファーに入れられた状態でファイルの開閉を管理しますか、それともファイルが存在している間は開いたままにしますか?

最後に、これらのより長時間の書き込みを処理するための組み込みオプションはありますか? または、カスタムの Writer/Stream 実装が必要ですか?

4

2 に答える 2

0

個人的には、File.Appendxxx ルーチンの 1 つを使用します。このルーチンは、ファイルを開き、データを追加してから再度閉じます。

このすべてのオープンとクローズのコストが高すぎるような速度で書いている場合は、ある種のメモリベースのキューを追加して、定期的にフラッシュします。

テキストベースのロギングを行っている場合は、.NET 用の多数のロギング フレームワークの 1 つを調べることができます。これは、ファイル名のローテーションなどとともに、この種の作業を行うことができます。

StreamWriter / FileStream などは、通常、破棄するまでファイルを開いたままにします。

于 2016-09-14T22:31:10.430 に答える
0

書き込みのためにファイルを無期限に開いておくことはお勧めできません。これは、ファイルのバックアップ、ファイルの編集、ファイルの読み取りが必要な場合、またはファイルの処理中にシステムがクラッシュした場合でも問題が発生する可能性があるためです。ファイルに書き込むと、必然的にデータが破損します。

ウィルの答えは、必要に応じてファイルを開いて追加するソリューションを提供します。ここでのポイントは、ファイルが 24 時間年中無休で書き込まれていない場合、ファイルを閉じない理由はないということです。

ファイルを 24 時間年中無休で開いておく必要があるという意味で、質問に直接答えるには。非同期メソッドを使用して、タスクを使用してファイルに書き込みます。このようにして、別のタスクを呼び出して、たとえば毎日、ファイルのバックアップを書き込むことができます。バックアップ ファイルを使用すると、本番ファイルの情報を表示できます。

于 2016-09-14T23:24:09.297 に答える