为了账号安全,请及时绑定邮箱和手机立即绑定

FileSystemWatcher与轮询以监视文件更改

FileSystemWatcher与轮询以监视文件更改

C#
杨魅力 2019-06-26 16:32:53
FileSystemWatcher与轮询以监视文件更改我需要设置一个应用程序来监视在目录中创建的文件,无论是在本地还是在网络驱动器上。会不会FileSystemWatcher或者计时器轮询是最好的选择。我过去使用过这两种方法,但没有广泛使用。什么问题(性能、可靠性等)这两种方法都有吗?
查看完整描述

3 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

我遇到的最大问题是缓冲区满了时丢失了文件。很容易修复-只要增加缓冲就行了。请记住,它包含文件名和事件,因此将其增加到预期的文件数量(试用和错误)。它确实使用不能分页的内存,因此,如果内存不足,它可以强制其他进程分页。

以下是关于缓冲区的MSDN文章:FileSystemWatcher.:.InternalBufferSize属性

根据MSDN:

增加缓冲区大小是昂贵的,因为它来自无法交换到磁盘的非分页内存,因此尽量保持缓冲区的小。若要避免缓冲区溢出,请使用NotifyFilter和Include子目录属性筛选出不必要的更改通知。

我们使用16 MB,因为一个大批预期在同一时间。工作正常,从不错过文件。

我们还会在开始处理一个文件之前读取所有文件.将文件名安全地缓存起来(在本例中是数据库表),然后处理它们。

对于文件锁定问题,我生成了一个进程,该进程等待文件解锁,等待一秒,然后等待两秒钟,然后等待四秒钟,以此类推。我们绝不可能民意测验。这是生产中没有错误的大约两年。


查看完整回答
反对 回复 2019-06-26
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

我遇到的最大问题是缓冲区满了时丢失了文件。很容易修复-只要增加缓冲就行了。请记住,它包含文件名和事件,因此将其增加到预期的文件数量(试用和错误)。它确实使用不能分页的内存,因此,如果内存不足,它可以强制其他进程分页。

以下是关于缓冲区的MSDN文章:FileSystemWatcher.:.InternalBufferSize属性

根据MSDN:

增加缓冲区大小是昂贵的,因为它来自无法交换到磁盘的非分页内存,因此尽量保持缓冲区的小。若要避免缓冲区溢出,请使用NotifyFilter和Include子目录属性筛选出不必要的更改通知。

我们使用16 MB,因为一个大批预期在同一时间。工作正常,从不错过文件。

我们还会在开始处理一个文件之前读取所有文件.将文件名安全地缓存起来(在本例中是数据库表),然后处理它们。

对于文件锁定问题,我生成了一个进程,该进程等待文件解锁,等待一秒,然后等待两秒钟,然后等待四秒钟,以此类推。我们绝不可能民意测验。这是生产中没有错误的大约两年。


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 620 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信