Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c“服务”;已达到netwerk bios命令限制";为什么会出错?最好的解决方案是什么?_C#_Service_.net 3.5_Filesystemwatcher - Fatal编程技术网

C# c“服务”;已达到netwerk bios命令限制";为什么会出错?最好的解决方案是什么?

C# c“服务”;已达到netwerk bios命令限制";为什么会出错?最好的解决方案是什么?,c#,service,.net-3.5,filesystemwatcher,C#,Service,.net 3.5,Filesystemwatcher,我有一个服务,可以打开多个观察者来观察多个文件夹。在观察文件夹一段时间后,我得到“网络bios命令限制已达到” 正如我在书中读到的,这是由于长期的请求超出了允许的范围 我相信这是因为我有下面的错误处理代码,这是由watchers错误事件触发的。这将通过再次调用WatchFile方法来启动观察程序的新实例。我相信这会让现在已经不存在的旧监视程序运行,并启动一个新的监视程序,但我担心停止该监视程序会阻止它再次启动,或者会停止基于该监视程序的所有实例 还是我错了,错误是否取决于更改的数量?这将导致同时

我有一个服务,可以打开多个观察者来观察多个文件夹。在观察文件夹一段时间后,我得到“网络bios命令限制已达到”

正如我在书中读到的,这是由于长期的请求超出了允许的范围

我相信这是因为我有下面的错误处理代码,这是由watchers错误事件触发的。这将通过再次调用WatchFile方法来启动观察程序的新实例。我相信这会让现在已经不存在的旧监视程序运行,并启动一个新的监视程序,但我担心停止该监视程序会阻止它再次启动,或者会停止基于该监视程序的所有实例

还是我错了,错误是否取决于更改的数量?这将导致同时插入100个文件,从而导致此错误

我曾考虑在运行此错误时停止并启动服务,但这并不能解决问题本身,而只是将其隐藏起来。有更好的解决办法吗

private static void watcherError(String directory, Boolean intray, ErrorEventArgs e, FileSystemWatcher watcher)
{
    Exception watchException = e.GetException();
    EventLog.WriteEntry("WhiteFileMover", String.Concat("error gedetecteerd, watcher werd herstart  -  ", watchException.Message), EventLogEntryType.Information);
    watcher = new FileSystemWatcher();
    while (!watcher.EnableRaisingEvents)
    {
        try
        {
            // This will throw an error at the
            // watcher.NotifyFilter line if it can't get the path.
            WatchFile(directory, intray);
        }
        catch(Exception exp)
        {
            // Sleep for a bit; otherwise, it takes a bit of
            // processor time
            EventLog.WriteEntry("WhiteFileMover", String.Concat("Failed to restart watcher, retrying in 5 seconds  -  ", exp.Message), EventLogEntryType.Warning);
            System.Threading.Thread.Sleep(5000);
        }
    }
}

为什么不创建filewatcher并定义事件处理程序

看看这行:

watcher = new FileSystemWatcher();

您传入了FileSystemWatcher变量,但完全忽略了传递的值。相反,您创建了一个新实例。不仅如此,您还无法正确地处理实例。我的猜测是,您有一堆旧的FileSystemWatcher对象挂在周围等待收集。其中每一个都将保留操作系统中的一些实际文件系统资源。随着时间的推移,可用的文件句柄将用尽。

如何处理遇到错误的旧watcher?@Kolja如果我使用watcher.dispose,将仅处理该实例还是基于watcher的所有实例?例如,我创建了3个watcher实例,但只想处理其中一个。它将处理变量指向的当前实例,即失败的实例。之后,您可以创建一个新实例。但是你不需要处理它,只需要创建一个新的,最终可能会浪费掉一堆观察者实例。你能分享你的解决方案吗?我正在考虑使用这里的两种解决方案之一。使用目录轮询或写入FSW池为同一根目录返回一个对象。但是,我相信双方都会有自己的问题。另外,为FSW创建池而不是创建多个FSW只会延迟问题,但最终会遇到网络BIOS错误,我必须重新启动监视。在创建新的监视程序之前,我已添加了watcher.dispose,但错误保持不变。在旧的观察者从内存中删除之前,我还需要做些什么吗?@Andy Dispose()与内存无关。谢天谢地,内存不是你的问题(文件句柄是)。但真正的问题是你不应该一直创建一个新的观察者。你想为你的应用使用一个观察者,并传递对那个实例的引用。