원격 서버/네트워크 경로에서 22 개의 폴더를 모니터링하는 Windows 2008 Server에 C# (.Net Framework 3.5) 기반 Windows 서비스 응용 프로그램이 있습니다. 때때로 지금은 로그에서 예외가 발생합니다.FileSystemWatcher 예외 - 네트워크 BIOS 명령 한계에 도달했습니다.
System.ComponentModel.Win32Exception : 네트워크 BIOS 명령 한계에 도달했습니다.
나는 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이기 때문에 내가
MaxMpxCT
등 이미
this one 및
this one 등의 유래에 관련 질문을 살펴 보았다,
MaxCmds
에 대한 레지스트리 키가없는, 그러나 그들 중 누구도이 문제를 해결하지 못한 것 같습니다.
문제를 해결하는 데 도움이나 안내가 필요합니다.
EDIT : Windows 2008 서버에서 MaxCMDs
한도를 높이는 방법에 대해서도 비슷한 question on ServerFaults을 추가했습니다.
EDIT 2 : 내 서버 호스팅 Windows 서비스에서 MaxCmds 및 MaxMpxCt 키를 만들고 해당 값을 250
으로 설정했지만 아무런 효과가 없습니다. 나는이 기사를 따라 갔다. http://alitarhini.wordpress.com/2011/04/06/299/
FileSystemWatcher는 * 값 비싼 * 운영 체제 리소스입니다. 파일 시스템은 이러한 알림을 생성하기 위해 많은 작업을해야합니다. 귀하의 운영 체제가 합리적인 것으로 간주하는 것의 당신의 우물. 물론 비합리적인 제한을 조정하여 문제를 해결하지는 마십시오. 더 적은 수의 관찰자를 사용하여 해결할 수 있습니다. –
@HansPassant, 코멘트 주셔서 감사합니다. 필자는 22 개의 폴더를 모니터링해야하고, 앞으로는 증가 할 것입니다.'FileSystemWatcher'를 함께 모으고 여러 스레드에서 모든 디렉토리를 주기적으로 모니터하는 타이머를 사용하려고합니다. 이 방법이 자원을 덜 차지할 것이라고 생각하십니까? – user2711965
불필요한 네트워크 트래픽과 다른 리소스를 많이 생성합니다. 타이머 간격을 10 분 정도의 적당한 값으로 설정하는 한 실제 문제는 아닙니다. –