FileSystemWatcher across the network(全文引用如下)
很抱歉,
FileSystemWatcher.InternalBufferSize
没有说得很清楚
监控网络时的缓冲区大小
小路。建议不要超过64K
监控网络路径时。
FileSystemWatcher 基本上是一个 .Net
Win32 的包装器
ReadDirectoryChangesW API。使用
ReadDirectoryChangesW,您创建并
指定操作系统将使用的缓冲区
填充更改。然而,
中没有提到的
阅读DirectoryChangesW 文档
(但在
FileSystemWatcher 文档)是
文件系统创建一个内部内核
用于存储更改信息的缓冲区
暂时直到它有机会
更新用户缓冲区。的大小
创建的内核缓冲区是
中指定的相同尺寸
ReadDirectoryChangesW 并被创建
在非分页池内存中。每次
一个 FileSystemWatcher /
创建 ReadDirectoryChangesW /
调用,一个新的内核缓冲区也是
已创建。
内核内存池(分页和
非分页)在系统中预留
设备驱动程序的地址空间和
其他要使用的内核组件。他们
动态增长和收缩
必要的。的当前大小
去游泳池可以很容易地看到
任务的性能选项卡
经理。池子会变大
动态直到达到最大值
在启动时计算的值
并且取决于可用的系统
资源(主要是 RAM)。你不
想要达到这个最大值,否则
各种系统服务和驱动程序
将开始失败。然而,这
计算出的最大值并不容易
可用的。确定最大值
池大小,您需要使用内核
调试器。如果你有兴趣
有关系统的更多信息
内存池,我建议你
查看 MSPress 书中的第 7 章
所罗门的 Windows 2000 内部和
鲁西诺维奇。
考虑到这一点,没有
关于缓冲区大小的建议
您可以使用。当前和最大值
系统池的大小将
因客户而异。
但是,您可能不应该去
每个 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)
实现一个过滤器驱动程序。
我希望以上解释能帮助你
了解问题的根本原因
你正在经历。请回复
让我们知道您是否需要
更多信息。谢谢。