windows FileSystemWatcher是如何工作的?

odopli94  于 2022-11-18  发布在  Windows
关注(0)|答案(1)|浏览(148)

我想了解System.IO.FileSystemWatcher是如何工作的?因为我有一个要求,我需要查看100个或更多文件夹下的所有文件,每个文件夹将有大约1K的文件。
我不确定如果我使用FileSystemwatcher,它是否会创建许多线程来监视这些文件,这将影响我的应用程序的性能?因此,您能否告诉我System.IO.FileSystemWatcher是如何在幕后工作的,或者它是否在内部使用线程来监视这些目录?

oknwwptz

oknwwptz1#

FileSystemWatcher在内部使用Windows API ReadDirectoryChangesW函数(可以从FileSystemWatcher参考源代码中看到)。ReadDirectoryChangesW的底层实现没有文档记录,但在回答您的具体问题,即FileSystemWatcher是否创建单独的线程来监视文件时,答案是“否”。
但是,考虑到您的目录包含许多文件,有必要从文档中有关FileSystemWatcher的注解中突出显示以下内容:
Windows操作系统会通知您的元件FileSystemWatcher所建立之缓冲区中的档案变更。如果在短时间内有许多变更,缓冲区可能会溢位。这会导致元件无法追踪目录中的变更,而且只会提供总括通知。使用InternalBufferSize属性增加缓冲区的大小会耗费大量资源。因为它来自无法换出到磁盘的非分页内存,所以请保持缓冲区尽可能小但足够大,以免错过任何文件更改事件。要避免缓冲区溢出,请使用NotifyFilter和IncludeSubdirectories属性,以便筛选出不需要的更改通知。
这里有两个要点:
1.对于许多FileSystemWatcher示例,将创建许多缓冲区来存储更改事件,并且这些缓冲区是从非分页内存(资源有限)中分配的。
1.如果您监视的目录中发生了大量更改,则可能会错过事件。

相关问题