C#/ WPF过度使用FileSystemWatcher?

时间:2017-08-02 15:26:17

标签: c# events filesystemwatcher event-listener

我正在创建一个简单的应用程序,用户可以根据预先录制和播放电视节目 Seasons Episodes 现有的文件夹系统已存在于用户计算机上。 我想监视实际文件/文件夹是否有任何更改,因此我希望在每个季节都存储FileSystemWatcher的实例,以侦听相应文件夹中可能发生的任何更改。根据每个节目上的 Seasons 的数量,这可以在同一时间内达到最多1000个事件。我应该注意哪些性能/不稳定问题?

其中一个答案here表明,将听众数量增加到10,000以上肯定是一个问题,但由于我不期待那么多记录,我可能会回答这个问题{{3}一般来说,事件的表现并不是那么大。关于有多少听众应该同时活动,是否有某种经验法则?任何建议都是最受欢迎的。

1 个答案:

答案 0 :(得分:1)

OP

  

所以我想在每个季节存储一个FileSystemWatcher实例来监听相应文件夹中可能发生的任何更改

你可以这样做,但为什么你只有一个有多个:

  

您可以查看指定目录的文件和子目录的更改 - MSDN

e.g。

myMonitor.IncludeSubdirectories = true;

OP

  

我应该注意哪些性能/不稳定问题?

可能,但如果你只使用一个,它会降低可能性,而不会降低功能。

无论如何,问题不在于数量的听众(好吧,但另一页进入了那个),而FSW 无法保证在高容量磁盘活动期间,它不会错过任何事件

MSDN:

  

Windows操作系统会在FileSystemWatcher创建的缓冲区中通知组件文件更改。 如果短时间内有很多变化,缓冲区可能会溢出。这会导致组件失去对目录中的更改,并且它只会提供一揽子通知。使用InternalBufferSize属性增加缓冲区的大小是昂贵的,因为它来自无法换出到磁盘的非分页内存,因此请保持缓冲区尽小但足够大,以免错过任何文件更改事件。要避免缓冲区溢出,请使用NotifyFilter和IncludeSubdirectories属性,以便过滤掉不需要的更改通知。 Tell me more