後片付けを任されたアプリケーションがあります。アプリケーション自体は比較的単純です。SQLクエリを実行し、Webサービスを使用して、結果をログファイルに出力します。私の仕事は、アプリケーションが完了した後、ファイルをNASにアーカイブすることです。ファイルが完了するまでファイルを排他的にロックするため、少し複雑になります。また、ログだけで、アプリケーションに触れることは許可されていません。とにかく私のアプリケーションはかなり単純です:
- ファイルを開くことができるかどうかを確認し(IOExceptionをキャッチ)、例外がスローされない場合は、bool[]でアクセス可能としてマークを付けます。
- trueとマークされたファイルの配列を調べ、ReadLineメソッドを使用してファイルの各行をStreamReaderに読み込みます。アプリケーションが一時的に中断して終了しないことがあるため、IOExceptionを使用して、ファイルが完了したかどうかを判断することはできません。実際にテキストを解析する必要があります。
- 完了を示すテキストが見つかった場合は、ファイルをzip形式で圧縮し、アーカイブされたファイルをNASにロードして、元のファイルを削除します。
私のコードは機能しますが、非常に時間がかかります(ログファイルはそれぞれ約500 MBです)。改善についての私の考えは、ファイルの上部からではなく下部から検索を開始することですが、StreamReaderはそのような方法をサポートしていません。ReadToEndメソッドを使用してから逆読み取りを行うことはできません。これは、メモリ不足の例外がスローされるだけだからです。ログファイルの解析を高速化する方法について何か考えはありますか?