什么是FileSystemWatcher的理想InternalBufferSize大小?

5

我有一个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);

关于这个问题,微软在.NET 2.0中有所表述:

增加缓冲区大小是昂贵的,因为它来自无法交换到磁盘的非分页内存,因此请尽可能将缓冲区保持小。为了避免缓冲区溢出,请使用NotifyFilter和IncludeSubdirectories属性来过滤掉不需要的更改通知。 链接:FileSystemWatcher.InternalBufferSize Property

2个回答

4
对于这样的巨大工作量,你可能想选择“定期扫描”方法而不是即时通知。例如,您可以每5秒扫描一次目录并处理添加的文件。如果在处理完文件后将其移动到另一个目录中,则您的定期工作负载甚至可能变得很小。
这也是更安全的方法,因为即使您的处理代码崩溃,您仍然可以恢复,与通知不同,您的检查点不会丢失。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接