0

FileSystemWatcherクラスを使用してファイル/ディレクトリの変更を監視することは、非常にメモリを消費するのではないかと思います。パフォーマンスの低いコンピューターでバックグラウンドで継続的に実行されるデスクトップアプリケーションをC#で開発していますが、さまざまなファイルが変更されているかどうかを確認する方法が必要です。私はいくつかの解決策を考えることができます:

  1. FileSystemWatcherを使用してディレクトリを監視します。
  2. 通過する間隔で時限スレッドを実行し、これを手動でチェックします。
  3. actionhandlerスレッドが実行されるたびに手動で確認してください(プログラムはアクションに対して時々何かを実行します)。

助言がありますか?

ありがとう!

badPanda

4

5 に答える 5

6

イベントベースは、同じスレッドを使用してポーリングしたり、新しいスレッドを生成したりするよりも常に効率的であるため、FileSystemWatcherを使用することをお勧めします。デリゲートを使用するプログラミングモデルも、私の意見ではよりエレガントです。

于 2010-06-08T21:31:05.093 に答える
3

FileSystemWatcherクラスを使用して、パフォーマンスの問題なしに数百のディレクトリ内の*.txtファイルの変更を監視しました。だから私はそれが最良の解決策だと思います。

于 2010-06-08T21:31:58.930 に答える
2

FileSystemWatcherを使用します。これは、このオブジェクトが実行するように設計されていることです。これは、広く使用できるように開発およびテストされています。あなたが書いたものはすべて、それが持っているテストと最適化の監視下に置かれることはありません。必要がないときに車輪の再発明をする理由はありません。

于 2010-06-08T21:33:22.563 に答える
1

私が現在(全国的に)取り組んでいる大規模なファイル転送プロジェクトでは、FileSystemWatcherは一方向のオプションでした(ファイルロック、イベントキューイングなどの管理があります)。基盤となるOSコンストラクトを使用すること(このイベントベースの対話をすべて提供すること)には非常に多くの利点があるため、そうでなければこのような効率的な動作を実現できるとは思いません。

于 2010-06-08T21:39:31.970 に答える
1

プログラムがフォーカスを取り戻すたびに、ファイル/ディレクトリの変更を手動でチェックするプログラムをいくつか見ました。これは、プログラムがいくつかの要件を満たしている場合に適切な場合があります。

  1. プログラムが長期間非アクティブになっている(つまり、ファイルの変更について知る必要がない状態にある)のはよくあることです。
  2. プログラムがアクティブなときにファイル/ディレクトリが変更される可能性はほとんどありません(通知を必要としないプログラム自体を除く)。
  3. 関心があるのは少数のファイルだけです。

それでもFileSystemWatcher、その場合でも大丈夫です。

于 2010-06-08T21:39:40.313 に答える