【问题标题】:Changing InternalBufferSize on FileSystemWatcher for a network path在 FileSystemWatcher 上更改网络路径的 InternalBufferSize
【发布时间】:2015-10-14 18:45:05
【问题描述】:

我在 Windows 服务中有一个 FileSystemWatcher,我需要使 InternalBufferSize 更大。我已将其设置为 4096 的倍数(当前为 20 * 4096)。如果我正在监视本地驱动器,则没有任何问题,并且一切正常。

如果我将被监控的目录更改为 unc 路径,我会收到“参数不正确”的错误消息,并且观察者不会获取任何更改。

有没有办法解决这个问题?

【问题讨论】:

  • 缓冲区大小限制是您使用的文件系统的实现细节。如果它是一个 UNC 路径,那么您很可能会遇到一些麻烦,例如启动 Linux 的廉价 NAS 设备。倾向于落入“你得到你所支付的”的括号。通过尽快将通知转储到线程安全队列中,获取另一个或使您的代码更智能。
  • 它是一个多层设置,非常昂贵和快速。但是,我不会让我们的网络人员在其上放置错误的设置。我会检查主要支持人员何时回到办公室。

标签: c# filesystemwatcher


【解决方案1】:

根据底层非托管函数ReadDirectoryChangesW的文档:

ReadDirectoryChangesW 失败,ERROR_INVALID_PARAMETER 当 缓冲区长度大于 64 KB 并且应用程序正在监视 网络上的目录。这是由于数据包大小限制 与底层文件共享协议。

您的缓冲区为 80 KB,超过了此限制。查看最大值 (64 KB) 是否适合您的目的。如果没有,您将不得不以其他方式解决它 - 显然,增加缓冲区大小已经过时了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多