【问题标题】:What is the ideal size for FileSystemWatcher InternalBufferSize?FileSystemWatcher InternalBufferSize 的理想大小是多少?
【发布时间】:2012-03-16 14:55:26
【问题描述】:

我的 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

【问题讨论】:

    标签: c# buffer filesystemwatcher


    【解决方案1】:

    对于如此庞大的工作量,您可能希望选择“定期扫描”方法而不是即时通知。例如,您可以每 5 秒扫描一次目录并处理添加的文件。如果您在处理完文件后将其移动到另一个目录,您的周期性工作量甚至可能会变得很小。

    这也是一种更安全的方法,因为即使您的处理代码崩溃,您也可以随时恢复,与通知不同,您的检查点不会丢失。

    【讨论】:

      【解决方案2】:

      您可以将缓冲区设置为 4 KB 或更大,但不得超过 64 KB。如果您尝试将 InternalBufferSize 属性设置为小于 4096 字节,您的值将被丢弃并且 InternalBufferSize 属性设置为 4096 字节。为获得最佳性能,请在基于 Intel 的计算机上使用 4 KB 的倍数。

      来自: http://msdn.microsoft.com/de-de/library/system.io.filesystemwatcher.internalbuffersize(v=vs.110).aspx

      【讨论】:

        猜你喜欢
        • 2016-09-01
        • 2012-05-28
        • 2022-12-29
        • 2012-10-17
        • 1970-01-01
        • 2021-11-04
        • 1970-01-01
        • 1970-01-01
        • 2018-10-20
        相关资源
        最近更新 更多