gpt4 book ai didi

c# - FileSystemWatcher 异常 - 已达到网络 BIOS 命令限制

转载 作者:太空狗 更新时间:2023-10-30 01:04:20 25 4
gpt4 key购买 nike

我在 Windows 2008 Server 上有一个基于 C#(.Net framework 3.5)的 Windows 服务应用程序,它正在监视远程服务器/网络路径上的 22 个文件夹。时不时地我会在日志中得到一个异常

System.ComponentModel.Win32Exception: The network BIOS command limit has been reached.

我试过增加 InternalBufferSize到 MAX (64K) 但它对异常没有任何影响。

我是这样定义的:

在类级别:

FileSystemWatcher fsw;

在初始化方法中

fsw = new FileSystemWatcher("FolderUNC");
fsw.IncludeSubdirectories = false;
//m_fsw.InternalBufferSize = 65536; -- Commented out to default 8K
fsw.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.DirectoryName | NotifyFilters.FileName | NotifyFilters.Size;
fsw.Renamed += new RenamedEventHandler(OnChanged);
fsw.Deleted += new FileSystemEventHandler(OnChanged);
fsw.Changed += new FileSystemEventHandler(OnChanged);
fsw.Created += new FileSystemEventHandler(OnChanged);
fsw.Error += new ErrorEventHandler(OnFileSystemWatcherError);
fsw.EnableRaisingEvents = true;

我还确保在出现错误或停止服务时处理 FileSystemWatcher 对象。喜欢

if (fsw != null)
fsw.Dispose();

我试过遵循article KB-810886 ,但由于我的服务器是 Windows Server 2008,所以我没有 MaxCmdsMaxMpxCT 等的注册表项。我已经查看了 Stackoverflow 上的相关问题,例如 this onethis one ,但他们似乎都没有解决这个问题。

感谢您提供解决问题的任何帮助或指导。

编辑:我还添加了一个类似的 question on ServerFaults , 关于如何在 Windows 2008 服务器上提高 MaxCMDs 的限制。

编辑 2:我在托管 Windows 服务的服务器上为 MaxCmds 和 MaxMpxCt 创建了 key ,并将它们的值设置为 250,但它没有任何效果。我关注了这篇文章。 http://alitarhini.wordpress.com/2011/04/06/299/

最佳答案

在决定“您是否应该放弃 FSW 并推出自己的 (RYO)?”时需要考虑的事项:

  • 您目前监控 22 个文件夹。这个数字会上升吗?多高?
  • 每个文件夹中有多少个文件?一些?还是几千?
  • 解决方案的性质是什么?这是一个放置文件夹的解决方案,您可以在其中立即将文件移动到其他地方吗?还是备份类型的解决方案,您在其中对文件进行差异化处理?其中每一项都会对您与远程文件的交互方式产生影响。
  • 您是否正在执行可能会产生额外 FSW 事件的远程文件操作? FSW 事件针对许多事情引发,从重命名、编辑、更改属性、标志和权限。
  • 您需要每秒处理多少个受监控的文件操作?一些?还是几千?
  • FSW 在网络堆栈中使用优化的调用,这些调用将从受监控的操作系统(假设目标操作系统是 >Windows 98)引发事件,而不是您必须自己拉取整个文件列表的自行调用下来,然后 diff 它进行更改。 FSW 在文件多的地方胜出;如果只有少数人,RYO 可能会 获胜。如果您受监控的文件系统不是 Windows 机器,FSW 只需以与 RYO 解决方案相同的方式轮询文件。
  • FSW 可能会因高吞吐量而重载。意识到单个操作可以向 FSW 引发许多事件。确保您已设置文件类型和事件类型的过滤器以滤除噪音。
  • FSW 使用非分页内存。它可能很昂贵,甚至会削弱没有足够 RAM 的繁忙服务器的吞吐量。 22 个 FSW 实例会很快变得毛茸茸。
  • 尽可能保持 FSW 缓冲区为空! 考虑将具有 FSW 的线程与处理事件的线程隔离开来,以便 FSW 引发的事件得到处理并立即从缓冲区中清除。如果并发事件的数量文件有几十个,你可以简单地在 *Changed 事件中开始一个新任务;如果同时事件的文件数以千计,您将需要实现生产者/消费者模式来完成这项工作。

关于c# - FileSystemWatcher 异常 - 已达到网络 BIOS 命令限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23811363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com