-1

これが私の問題です(C#、. net3.5):

  1. 基本的に、フォルダーからファイルを読み取るファイルリーダーが必要ですが、ファイルはまだではありませんが、すぐに生成されます。
  2. 私はそれらのファイルの名前がどうなるかを正確に知っています。
  3. 1つのファイルを読み取り、そのファイルを処理し(いくつかの統計計算)、現在の処理が終了したら次のファイルに移動したいと思います
  4. 最も重要なことは、ファイルリーダーを軽量バージョン、つまりCPUリソースの消費をできるだけ少なくしたいということです。

私はFileSystemWatcherを使用することを考えません。理由は次のとおりです。

  1. イベントが発生すると(たとえば、ファイルの準備ができました)、他のファイルの処理が大幅に遅れます。したがって、FileSystemWatcherに依存している場合、イベントを見逃します。
  2. とにかくファイルがそこにあるので、ファイル名を正確に知っているので、ファイルがあればそれを読むことができると思います。

誰か提案がありますか?今、私はFileSystemWatcherを試しましたが、多くのファイルをスキップしました。また、すべてのファイルが処理されるまで、ファイルを読み取るようにしばらく(true)を使用しますが、90%のCPUを消費します。

どんな提案でも大歓迎です。

4

2 に答える 2

3

1 つの提案: 複数のスレッドでファイル システム ウォッチャーを使用して、ファイルをキューに入れ、他のスレッドで処理します。それでもファイルをドロップし続ける場合は、FileSystemWatcher バッファーのサイズを増やすことができますが、このアプローチは機能するはずです。

于 2013-02-25T22:43:42.070 に答える
-1

私の質問は、ファイルを即座に解析するために必要なラッシュは何ですか?

すべてのファイルについて x 分または秒ごとにディレクトリをチェックし、それらをキューに入れて処理します。何らかの理由でファイルを保持したい場合は、ファイルを削除するか、別の拡張子に名前を変更してください。

最後のファイルがキャプチャされた後、タイマーで x 時間後にチェックして、新しいファイルがあるかどうかを確認します。はい、負荷に応じてバックアップするものもありますが、1分間に数百のレコードが入力されるパーサーシステムを構築しましたが、この方法を使用するとうまく機能しました.

そのx時間内に解析するレコードがない場合、プログラムは次の間隔をチェックするまで休憩します。この方法を使用して、特定の順序で複数のディレクトリをチェックしたり、さまざまなプロセスをチェックしたりできるため、これは良いことです。

于 2013-02-26T05:03:17.997 に答える