ファイルシステムの変更を処理するための最適なアーキテクチャは?
-
09-06-2019 - |
質問
シナリオは次のとおりです。
特定のディレクトリ内の変更を監視するアプリを作成しています。このディレクトリには、「ほぼ」一意の GUID を持つ、毎分数千のファイルが溢れます。ファイル形式は次のとおりです。
GUID.DAT WHERE GUID == xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
私のアプリは、リアルタイムで追加および削除されるすべてのファイルを表示する 1 つのテキスト ボックスを持つフォームになります。新しいファイルが入ってくるたびに、このファイルでテキストボックスを更新する必要がありますが、最初にこの準一意の GUID が本当に一意であることを確認する必要があります。そうであれば、この新しいファイルでテキストボックスを更新します。
ファイルがそのディレクトリから削除されるときは、そのファイルが存在することを確認してから削除し、それに応じてテキストボックスを更新します。
問題は、.NET filewatcher を使用していて、(バッファサイズ + 1) 番目のファイルが受信されるたびに内部バッファが爆発しているようです。また、アプリ内に内部リストを保持し、受信したすべてのファイルを追加するだけで、後で一意の GUID チェックを実行しようとしましたが、サイコロは使用しませんでした。
解決
私の頭の中にあることがいくつかあります。
- ガイドが ない 一意であるか、同じ名前のファイルを上書きしないのか、それとも何らかの外部アクション (例:アーカイブをチェックしてください)?(すなわち、これはヤグニの瞬間ですか?)
- 以前に FileSystemWatcher を使用してかなりの成功を収めたことがあります。何かアイデアを教えてください。 どうやって 実際に何かやってるの?
- カスタム リストを使用するときに「サイコロはありません」と言った場合、何が問題でしたか?FileSystemWatcher を使わずに、どうやってファイル システムの変更をチェックしていたのでしょう?!
申し訳ありませんが、まだ答えがありません。問題について詳しく知りたいだけです:)
他のヒント
をご覧になることをお勧めします。 SHChangeNotify API 呼び出し。あらゆる種類のシェル イベントを通知できます。ファイルの作成と削除のアクティビティを監視するには、SHCNE_CREATE 引数と SHCNE_DELETE 引数に特別な注意を払う必要がある場合があります。