我们正在为内部会计程序包系统编写类似工具的文本编辑器,该工具具有可以通过我们自己的Xml语言规范执行的操作。这些宏命令在Xml文件中指定,我们需要能够监视打开的文件是否在外部修改了bean。

唯一的问题是,可能随时有20-30个文件打开了不同的路径。在这种情况下使用多个FileSystemWatcher会很好吗?还是最好监视根驱动器并捕获与编辑器中打开的文件匹配的特定事件(尽管可能引发许多事件)。

一些是本地驱动器(C,D,E),另一些是它们的网络驱动器(U,X,G,H)。文件也很大,大约300-400Kb。

最佳答案

首先几个事实

1- FileSystemWatcher是ReadDirectoryChanges的包装
2- ReadDirectoryChanges创建一个内核缓冲区,以针对每次对ReadDirectoryChanges的调用从非页面缓冲池内存中缓存事件

上面第2点的含义是FileSystemWatcher的每个实例将从非页面缓冲池中分配内存。请记住,这是用于内核模式驱动程序等的内存,虽然它可以动态扩展,但“硬”限制为在启动时根据系统资源(计算机拥有多少内存)计算出的最大大小。 )。

因此,鉴于以上所述,我将考虑以下内容。

如果您希望看到大量更改。如果这个值很低,请选择多个缓冲区最小的观察者。

还请记住,如果您决定使用较大的缓冲区,则监视网络驱动器不支持超过64K的缓冲区大小(大于此大小),并且您将不会获得事件。

关于c# - 多个FileSystemWatcher监视本地系统上的文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2934133/

10-11 22:25
查看更多