0

Windowsサービス-C#-VS2010

FileWatcherサービスのインスタンスが複数あります。それぞれがディレクトリ内で異なる拡張子を探します。ディレクトリのzipファイルを監視し、拡張子の名前をサービスが参照する値の1つに変更する別のルーターサービスがあります。

例:

問題のディレクトリ(すべてのFileWatcherサービスがこのディレクトリを監視します)には、次のファイルが含まれています。

a.zip、b.zip、c.zip

FileWatcher1は*.000の拡張子を検索し、FileWatcher2は* .001の拡張子を検索し、FileWatcher3は*.002の拡張子を検索します

ルーターは.zipファイルを確認し、zipファイルのファイル拡張子を変更しますが、各FileWatcherに同じ量の作業を委任するには、順番を維持する必要があります。

また、2つのzipファイルがドロップされた場合、a.zip-> a.000、およびb.zip-> b.001に変更されますが、5分が経過し、別のzipファイルのバッチがドロップされた場合は、次のようになります。次のファイルの名前を*.002に変更します。

すべてが正常に機能していますが、ルーターにシーケンシャル部分を実装する必要があり、実装の最善の方法がわかりません(現在、ルーターはすべての拡張子を* .000に変更しているため、1つのFileWatcherのみが機能します)。これは安価な方法と考えられるかもしれませんが、現時点で本当に必要なのはそれだけです。どんな助けでもいただければ幸いです。

4

2 に答える 2

0

ルーターはカウンターを保持し、新しいファイルごとにmod 3(またはN、Nはウォッチャーの数)操作を実行できますか?

于 2012-07-24T19:30:46.710 に答える
0

多分それを見る別の方法。ウォッチャーを1人にして、スレッドプールを使用することを考えたことはありますか?私がこれを提案している理由は、作業を適切に分散させるために、フィールドのサイズと複雑さを調べ始める必要があるためです。最初のジョブからの大量のデータの処理でまだビジー状態のときに次の行にあるため、.000にさらに作業をプッシュし始める可能性がありますが、.001は小さなファイルを処理していたため解放される可能性があります。

次の拡張子の問題を本当に回避したい場合は、静的変数を次の拡張子番号で保持しないのはなぜですか。Router Filewatcherが新しいファイルを次々に検出するときに複数のスレッドを実行するかどうかは、100%わかりませんが、そうは思いません。その場合は、静的変数にアクセスするときにスレッドセーフコードを入力する必要があります。

于 2012-07-24T19:40:40.367 に答える