새 파일을 확인하고 데이터베이스에 내용을 저장하고 파일을 삭제하도록 FileSystemWatcher를 설정했습니다. 약 10 일 전에 일부 파일을 무시하기 시작했습니다. 우리는 총 50,000 개의 파일 중 1,500 개의 파일을 의미합니다. 수동으로 파일을 다른 디렉토리로 이동 한 다음 감시 된 디렉토리로 다시 이동하면 파일이 감지됩니다.FileSystemWatcher가 작동하지 않는 경우가 있음
InternalBufferSize는 큰 일괄 처리를 처리하기 위해 32 kB로 설정됩니다. 문제없이 한 번에 300 개 이상의 파일을 처리합니다. 현실은 그와 거의 비슷하지 않습니다.
FileSystemWatcher와 관련없는 변경 사항으로 40 일 전에 프로그램을 마지막으로 변경했습니다. 1 년 넘게 생산되었습니다. 서버 부하에서 스파이크가 보이지 않습니다.
갑자기 이와 같은 문제가 발생할 수있는 원인은 무엇입니까? FileSystemWatcher가 단순히 unreliable 일 가능성이 있습니까?
1000 개의 파일이 만들어지는 테스트를 만들었습니다. 실행 후 이벤트 로그에 3,000 개의 항목이 있습니다. 그래서 버퍼 오버 플로우가 문제가되지 않는다고 생각합니까? 여러 가지 방법으로 프로그램을 테스트하고 또 다시 코드를 확인
private void button1_Click(object sender, EventArgs e)
{
fsw = new FileSystemWatcher();
fsw.Path = @"C:\temp\fsw-test";
fsw.IncludeSubdirectories = false;
fsw.NotifyFilter = NotifyFilters.FileName;
fsw.Created += new FileSystemEventHandler(fsw_Created_handler);
fsw.EnableRaisingEvents = true;
fsw.InternalBufferSize = 32768;
fsw.Error += fsw_Error_handler;
}
private void fsw_Created_handler(object sender, FileSystemEventArgs e)
{
new Thread(new ParameterizedThreadStart(work)).Start(e);
}
private void fsw_Error_handler(object sender, ErrorEventArgs e)
{
EventLog.WriteEntry("few test", e.GetException().Message);
}
private void work(object e)
{
try
{
EventLog.WriteEntry("fsw test", "Queueing File Started");
Thread.Sleep(10000);
EventLog.WriteEntry("fsw test", ((FileSystemEventArgs)e).Name);
EventLog.WriteEntry("fsw test", "Queueing File Done");
}
catch (Exception ex)
{
EventLog.WriteEntry("fsw test", "Error = " + ex.StackTrace + " *** " + ex.ToString());
}
}
private void button2_Click(object sender, EventArgs e)
{
for (int i = 1; i <= 1000; i++)
{
System.IO.File.Create(@"C:\temp\fsw-test\" + i);
}
}
편집 2 스트레스는 아무런 문제는 없었다. 지금은 재현 할 수없는 버그입니다. 로그를 더 자주 만들고 상황을 모니터링하기 위해 몇 가지 변경 작업을 수행 할 것입니다.
내가 줄 수있는 유일한 조언은 'FileSystemWatcher'에 대한 옵션 중 일부가 매우 신빙성이 있다는 것입니다. 내가 그것을 사용할 때, 나는 내가 읽었던/쓰는/편집을 잡을 것이라고 생각했던 것을 설정했지만, 그것들 모두를 잡는 것은 아니었다. 아마도 파일이 "만들어지는"방법에 대한 새로운 "사례"가 등장했을 것이고 FSW는이를 잡기 위해 설정되지 않았지만 여전히 "이동"을 잡아서 하나의 디렉토리에서 다른 디렉토리로 이동시키는 이유입니다 공장. – Origin
@Origin 모든 파일이 시스템에 똑같은 방식으로 입력됩니다. – Stijn
워처에서 '오류'이벤트를 모니터링하고 있습니까? – adrianm