C# c“服务”;已达到netwerk bios命令限制";为什么会出错?最好的解决方案是什么?
我有一个服务,可以打开多个观察者来观察多个文件夹。在观察文件夹一段时间后,我得到“网络bios命令限制已达到” 正如我在书中读到的,这是由于长期的请求超出了允许的范围 我相信这是因为我有下面的错误处理代码,这是由watchers错误事件触发的。这将通过再次调用WatchFile方法来启动观察程序的新实例。我相信这会让现在已经不存在的旧监视程序运行,并启动一个新的监视程序,但我担心停止该监视程序会阻止它再次启动,或者会停止基于该监视程序的所有实例 还是我错了,错误是否取决于更改的数量?这将导致同时插入100个文件,从而导致此错误 我曾考虑在运行此错误时停止并启动服务,但这并不能解决问题本身,而只是将其隐藏起来。有更好的解决办法吗C# c“服务”;已达到netwerk bios命令限制";为什么会出错?最好的解决方案是什么?,c#,service,.net-3.5,filesystemwatcher,C#,Service,.net 3.5,Filesystemwatcher,我有一个服务,可以打开多个观察者来观察多个文件夹。在观察文件夹一段时间后,我得到“网络bios命令限制已达到” 正如我在书中读到的,这是由于长期的请求超出了允许的范围 我相信这是因为我有下面的错误处理代码,这是由watchers错误事件触发的。这将通过再次调用WatchFile方法来启动观察程序的新实例。我相信这会让现在已经不存在的旧监视程序运行,并启动一个新的监视程序,但我担心停止该监视程序会阻止它再次启动,或者会停止基于该监视程序的所有实例 还是我错了,错误是否取决于更改的数量?这将导致同时
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()与内存无关。谢天谢地,内存不是你的问题(文件句柄是)。但真正的问题是你不应该一直创建一个新的观察者。你想为你的应用使用一个观察者,并传递对那个实例的引用。