我们正在为我们的内部会计包系统编写一个类似文本编辑器的工具,它具有可以通过我们自己的 Xml 语言规范完成的操作。这些宏命令在 Xml 文件中指定,我们需要能够监控打开的文件是否被外部修改。
唯一的问题是可能同时打开 20-30 个不同路径的文件。在这种情况下使用多个 FileSystemWatcher 会好吗?或者监视根驱动器并捕获与编辑器中打开的文件匹配的特定事件会更好吗(尽管可能会引发很多事件)。
一些是本地驱动器(C、D、E),另一些是它们的网络驱动器(U、X、G、H)。文件也相当大,大约 300-400Kb。
最佳答案
首先是一些事实
1- FileSystemWatcher 是 ReadDirectoryChanges 的包装器
2- ReadDirectoryChanges 为每次调用 ReadDirectoryChanges 创建一个内核缓冲区以缓存来自非分页池内存的事件
上面第 2 点的含义是,每个 FileSystemWatcher 实例将从非分页池中分配内存。请记住,这是用于内核模式驱动程序等的内存,虽然它可以动态扩展,但它“硬”限制在启动时根据系统资源计算的最大大小(机器有多少内存).
鉴于以上情况,我会考虑以下内容。
如果您希望看到的更改量。如果这个值很低,请使用您可以逃脱的最小缓冲区大小的多个观察者。
另外请记住,如果您决定使用大缓冲区,监控网络驱动器不支持超过 64K 的缓冲区大小,如果超过 64K,您将无法获得事件。
关于c# - 多个 FileSystemWatcher 来监视本地系统上的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2934133/