c# - 多个 FileSystemWatcher 来监视本地系统上的文件?

标签 c# windows winforms system filesystemwatcher

我们正在为我们的内部会计包系统编写一个类似文本编辑器的工具,它具有可以通过我们自己的 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/

相关文章:

c# - Microsoft Azure 中的 IP 问题

C# ASP.NET : how to access cache when no HttpContext. 当前是否可用(为空)?

windows - 是否有适用于 Windows Mobile 6.0 的 Office Communicator 自动化 API

c# - WPF 未出现在 WinForms 的 ElementHost 内

c# - WinForms 单元测试

c# - 为您的应用程序获取新的 Facebook 点赞流

C# - System.FormatException 类型的未处理异常 - 列出字符串以列出 int

windows - 关于管道的基本问题

c++ - Windows header 中是否有禁用 TCHAR 中性函数名称宏定义的设置?

c# - 在鼠标悬停事件上更改按钮背景颜色