小心使用FileSystemWatcher组件

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