2016-08-22 9 views
0

キューコレクションではまだ動作しませんでした。しかし、私が集めることができた情報に基づいて、これは私の問題に対する正しいアプローチだと思われます。C#進行中にキューに新しい項目を追加する

私は特定のタイプの新しいファイルのためにフォルダをスキャンするコンソールアプリケーションを持っています。特定の基準に基づいています。新しい項目のみがqueue.xmlファイルに追加されます。これは、ある時間間隔(1時間ごと)で実行されます。

別のコンソールアプリが別の時点(4時間ごと)で起動されます。 queue.xmlファイルを読み込み、処理のために各項目を渡します。最善の方法は、xmlファイルを解析してキューコレクションを作成することです。このようにして、各アイテムは順番に処理されます。

ここに問題があります。処理ファイルには数時間かかる場合があり、その間にqueue.xmlに新しい項目が含まれている可能性があります。したがって、キューコレクションにはこの変更が反映されません。

xmlファイルをもう一度解析して、現在進行中のキューに新しい項目を追加することはできますか?

実行時にコレクションのサイズを変更すると問題が発生します。キューはそのように異なっていますか?

+2

XMLファイルのスキーマは何ですか?単なるファイル名ですか?なぜそれはXMLファイルですか? – itsme86

+0

XMLには、ファイル名、番組名、エピソードタイトル、エンコードプロファイル名、ステータスが含まれています。この情報の一部は処理のためにffmpegとハンドブレーキ(ファイル名)に、後処理のために残りのものに渡す必要があります。指定された時点ではカップルアイテムであり、完了後に削除されるため、データベースを使用したくないということです。第二に、後の処理のためにアイテムを収集するプロセスは、実際のエンコーディングとは別にすべきである。私の経験から、アプローチはより良いようです。エンコード処理中にエラーが発生することがあります。 – tipitoe

答えて

1

xmlファイルをもう一度解析して、現在進行中のキューに新しい項目を追加することはできますか?

もちろん、このことが起こるのに安全なルールを定義するだけで済みます。

どちらのアプリケーションでもmutexを使用して読み取り/書き込み中にファイルをロックし、処理アプリケーションでFileSystemWatcherイベントを購読してファイルが変更されたことを検出します。

実行時にコレクションのサイズを変更すると問題が発生します。キューはそのように異なっていますか?

それは、実行時に任意のコレクションのサイズを変更するために安全であることができ、あなたがコレクション(例えば、それらが理由でAdd()方法を持っている)を使用する理由は、通常だ...あなただけ安全にそれをしなければなりません、あなたのソリューションのコンテキストで。

キューへのマルチスレッドアクセスがある場合は、ロックします。

キューのサイズが反復処理中に変更される可能性がある場合は、キューのコピーを反復処理します。

プロセスが両方のアプリケーションで必要なファイルを変更する可能性がある場合は、アクセスを制御するためにmutexを使用します。

関連する問題