小心使用FileSystemWatcher组件
- 恶意程序可能通过得到对这个组件所监视的文件夹的访问,进而制造一些这个组件不能管理的变化(?),这可能导致缓冲去溢出或其他破坏
- 小心重复去激发事件
默认情况下,公开的事件自动调用OnChanged,OnCreated等方法,所以要避免显示的添加event handler.
处理一个文件操作导致激发改组件多个事件的情况
l 设置一个flag,采取先到先服务的策略;
l 设置通知过滤器;NotifyFilter - CD,DVD等媒体文件,因为时间戳和属性不能修改,所以该组件不能监视它们
- 设置filter为“”,效果是监视所有文件,包括隐藏文件!(*.*应该有同样的效果吧?)
- 设置该组件的内部缓冲区的大小
默认是4KB,能大约监视80个文件
设置大小的方法:修改InternalBufferSize属性
缓冲区溢出的危害:
由于组件丢失了反映文件夹变化的堆栈,它将可能仅提供一个blanket的通知
增加缓冲区占用非页面内存并且不能被交换到磁盘上,这意味着要保证缓冲区尽可能的小
估算合适大小的方法:
每个事件占用缓冲去的16bytes;加上足够的字节去存储Unicode文件名。
Win2000下的建议增量是4KB,这是对应于操作系统的默认页面大小,对于其他操作系统,建议的增量也是对应到默认的页面大小
不知道默认页面大小的值时,最安全的方法是调整到初始大小的双倍(按这个算法,应该是8KB喽),This will maintain the original interval needed for your operating system.(?) - 使用IncludeSubdirectories属性
改变文件可能会同时产生一个文件夹变化的通知。因为文件夹保存着每个文件的一些类型信息,如修改时间,属性等等。不需要监视这种变化时,设置此属性为false,这样并不会放弃对子文件夹中的文件的监视 - 任何需要关闭该组件的时候,设置EnableRaisingEvents属性,避免不必要的资源浪费