观看文件进行更改或冗余查询该文件会更有效吗?

时间:2010-06-08 21:24:16

标签: c# performance multithreading directory filesystemwatcher

我想知道使用FileSystemWatcher类观察文件/目录是否是非常耗费内存的。我正在用C#开发一个桌面应用程序,它将在低性能计算机上不断地在幕后运行,我需要一些方法来检查各种文件是否已经改变。我可以想到几个解决方案:

  1. 使用FileSystemWatcher查看目录。
  2. 按照经过的时间间隔运行定时线程并手动检查。
  3. 每次动作处理程序线程运行时手动检查(程序偶尔会对某个动作执行某些操作)。
  4. 有什么建议吗?

    谢谢!

    badPanda

5 个答案:

答案 0 :(得分:6)

基于事件总是比使用相同或生成新线程的轮询更有效,因此使用FileSystemWatcher是正确的想法。在我看来,使用委托的编程模型也更优雅。

答案 1 :(得分:3)

我使用FileSystemWatcher类来监视数百个目录中的* .txt文件更改,而不会出现性能问题。所以我想这是最好的解决方案。

答案 2 :(得分:2)

您想要使用FileSystemWatcher。这是该对象的目的。它已经开发并经过广泛使用测试。你写的任何东西都不会受到它所具有的测试和优化的严格审查。没必要时,没有理由重新发明轮子。

答案 3 :(得分:1)

在我目前正在进行的大型文件传输项目(全国范围内)中,FileSystemWatcher是一种单向选项(对文件锁,事件排队等进行一些管理)。在使用底层操作系统构造(提供所有这些基于事件的交互)时,你有很多优点,我不认为你会实现这种有效的行为。

答案 4 :(得分:1)

我见过一些程序,每次程序重新获得焦点时,都会手动检查文件/目录的变化。如果您的计划满足一些要求,这可能是合适的:

  1. 您的程序通常会在很长一段时间内处于非活动状态(即处于不需要知道文件更改的状态)。
  2. 当程序处于活动状态时,文件/目录不太可能发生变化(程序本身除外,不需要通知)。
  3. 您只关注少量文件。
  4. 即便如此,即使在这种情况下FileSystemWatcher也没问题。