网络上的 FileSystemWatcher(全文引用如下)
很抱歉,该文档
FileSystemWatcher.InternalBufferSize
没有说得很清楚
监控网络时的缓冲区大小
小路。建议不要超过64K
监视网络路径时。
FileSystemWatcher 基本上是一个 .Net
Win32 的包装器
ReadDirectoryChangesW API。使用
ReadDirectoryChangesW,您创建并
指定操作系统将使用的缓冲区
填充更改。然而,
中未提及的内容
ReadDirectoryChangesW 文档
(但在
FileSystemWatcher 文档)是
文件系统创建内部内核
用于存储变化信息的缓冲区
暂时,直到有机会
更新用户缓冲区。的大小
创建的内核缓冲区是
与指定的尺寸相同
ReadDirectoryChangesW 并创建
在非分页池内存中。每次
文件系统观察者 /
ReadDirectoryChangesW 已创建 /
调用时,还会创建一个新的内核缓冲区
创建的。
内核内存池(分页和
非分页)在系统中预留
设备驱动程序的地址空间和
要使用的其他内核组件。他们
动态增长和收缩
必要的。当前的大小
可以通过以下方式轻松查看泳池
任务的“性能”选项卡
经理。池子将会增长
动态地直到达到最大值
启动时计算的值
并取决于可用的系统
资源(主要是 RAM)。你不
想要达到这个最大值,否则
各种系统服务和驱动程序
将开始失败。然而,这
计算最大值并不容易
可用的。确定最大值
池大小,您需要使用内核
调试器。如果您有兴趣
有关系统的更多信息
内存池,我建议你
看看 MSPress 书中的第 7 章
《Windows 2000 内部》作者:Solomon 和
鲁西诺维奇.
考虑到这一点,就没有
关于缓冲区大小的建议
您可以使用。当前和最大
系统池的大小将是
因客户而异。
然而,你可能不应该去
每个 FileSystemWatcher 超过 64k /
ReadDirectoryChangesW 缓冲区。这
源于这样一个事实:有一个
网络访问的 64k 限制为
记录在 ReadDirectoryChangesW 中。
但最终你会得到
在各种上测试应用程序
预期的目标系统,以便您
可以调整你的缓冲区。
存在与 .Net 相关的开销
应用程序,我想
Win32 ReadDirectoryChangesW 程序
或许能够取得更好的成绩
相同缓冲区大小的性能。
然而,由于速度非常快且数量众多
文件更改,缓冲区溢出将会
不可避免,开发商正在走
必须处理案件时
发生超限,例如手动
枚举要检测的目录
变化。
总之,FileSystemWatcher 和
ReadDirectoryChangesW 是
轻量级文件更改检测
机制将有其
限制。更改期刊是
我们将采取的另一种机制
考虑中等重量的解决方案,但是
仍然有局限性:
http://msdn.microsoft.com/en-us/library/aa363798%28VS.85%29.aspx
重量级解决方案是
编写专用的文件系统过滤器
位于文件系统中的驱动程序
堆栈和监视文件系统
变化。当然这将是
最复杂的方法。大多数病毒
扫描仪、备份软件和文件
系统监控实用程序,例如
filemon (www.sysinternals.com)
实现过滤器驱动程序。
我希望以上解释对您有所帮助
了解问题的根本原因
你正在经历。请回复
让我们知道您是否需要
更多信息。谢谢。