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