我想了解 System.IO.FileSystemWatcher 在幕后是如何工作的?因为我有一个要求,我需要查看 100 个或更多文件夹下的所有文件,其中每个文件夹将包含大约 1K 个文件。
我不确定我是否使用 FileSystemwatcher 是否会创建许多线程来监视这些文件,这会影响我的应用程序的性能?那么您能否让我知道 System.IO.FileSystemWatcher 在幕后究竟是如何工作的,或者它是否在内部使用线程来监视这些目录?
内部FileSystemWatcher
使用Windows APIReadDirectoryChangesW函数(从FileSystemWatcher参考来源)。底层实现ReadDirectoryChangesW
没有记录,但回答了您的具体问题是否FileSystemWatcher
创建单独的线程来监视文件,因此答案是否定的。
然而,值得强调的是remarks on FileSystemWatcher
在文档中,考虑到您的目录包含许多文件:
Windows 操作系统通知您的组件由 FileSystemWatcher 创建的缓冲区中的文件更改。如果短时间内发生多次变化,缓冲区可能会溢出。这会导致组件失去对目录中更改的跟踪,并且它只会提供全面通知。使用 InternalBufferSize 属性增加缓冲区大小的成本很高,因为它来自无法换出到磁盘的非分页内存,因此请保持缓冲区足够小但足够大,以免错过任何文件更改事件。为了避免缓冲区溢出,请使用 NotifyFilter 和 IncludeSubdirectories 属性,以便您可以过滤掉不需要的更改通知。
从中可以得出两个结论:
- 与许多
FileSystemWatcher
例如,将创建许多缓冲区来存储更改事件,并且这些缓冲区是从非分页内存分配的,这是一种有限的资源。
- 如果您正在监视的目录中发生大量更改,您可能会错过事件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)