典型的な FileSystemWatcher ソリューションを実装しようとしています。ファイルの作成を監視するディレクトリと、作成されたファイルを吸い上げてDBに挿入するタスクがあります。大まかに言えば、これには、数秒ごとに発生するバーストで 150 ミリ秒のレートで表示される 6 または 7、80 文字のテキスト ファイルの読み取りと処理が含まれ、まれに 2MB のバイナリ ファイルも処理する必要があります。これは、ほとんどの場合、24 時間年中無休のプロセスです。
FileSystemWatcher オブジェクトについて読んだことから、そのイベントをあるスレッドでキューに入れ、別のスレッドでそれらをデキュー/処理する方が良いでしょう。私が今持っている困惑は、処理を行うスレッドのより良い作成メカニズムは何であるかということです。私が見ることができる選択肢は次のとおりです。
FSW イベントを取得するたびに、手動で新しいスレッドを作成します (ええ、わかっています.. ばかげたアーキテクチャですが、言わなければなりませんでした)。
FSW イベントを取得するたびに、CLR スレッド プールで処理をスローします。
起動時に、処理専用の 2 番目のスレッドを作成し、プロデューサー/コンシューマー モデルを使用して作業を処理します。メイン スレッドが要求をキューに入れ、2 番目のスレッドが要求をキューから取り出して作業を実行します。
ワークスレッドが常に必要になることがわかっているため、3番目の方法を優先する傾向があります。また、スレッドプールの感覚がないため、おそらくもっとそうです。