Gui*_*tos 5 c# buffer filesystemwatcher
我的 FileSystemWatcher 有问题。
我的应用程序需要监视短时间内在文件夹中创建的大量文件。
当我开始开发它时,我意识到如果我的缓冲区小于 64kb(微软建议的大小),很多文件都不会被通知。我尝试将缓冲区大小增加到超出此范围,直到达到适合我的值,即 2621440 字节!
对于这种情况,您建议使用什么小尺寸,或者缓冲区的理想尺寸是多少?
我的示例代码:
WATCHER = new FileSystemWatcher(SignerDocument.UnsignedPath, "*.pdf");
WATCHER.InternalBufferSize = 2621440; //Great and expensive buffer 2.5mb size!
WATCHER.IncludeSubdirectories = true;
WATCHER.EnableRaisingEvents = true;
WATCHER.Created += new FileSystemEventHandler(watcher_Created);
WATCHER.Renamed += new RenamedEventHandler(watcher_Renamed);
Run Code Online (Sandbox Code Playgroud)
微软在 .NET 2.0 中对此是这么说的:
增加缓冲区大小的成本很高,因为它来自无法换出到磁盘的非分页内存,因此请使缓冲区尽可能小。为了避免缓冲区溢出,请使用 NotifyFilter 和 IncludeSubdirectories 属性过滤掉不需要的更改通知。链接:FileSystemWatcher.InternalBufferSize 属性
对于如此巨大的工作负载,您可能希望选择“定期扫描”方法而不是即时通知。例如,您可以每 5 秒扫描一次目录并处理添加的文件。如果在处理文件后将其移动到另一个目录,您的定期工作量甚至可能会变得最小。
这也是一种更安全的方法,因为即使您的处理代码崩溃,您也可以随时恢复,与通知不同,您的检查点不会丢失。