У меня есть FileSystemWatcher для проверки новых файлов, сохранения содержимого в базе данных и удаления файлов.Около 10 дней назад он начал игнорировать некоторые файлы.Мы говорим о 1500 файлах из 50000 файлов.Путем ручного перемещения файлов в другой каталог и последующего их перемещения в просматриваемый каталог файлы замечаются.
Параметр InternalBufferSize имеет значение 32 КБ для обработки больших пакетов.Он обрабатывает более 300 файлов одновременно без проблем, и реальность даже близко не подходит к этому.
Последний раз программа была затронута более 40 дней назад, для изменения, не связанного с FileSystemWatcher.Он был в производстве уже более года.В загрузке сервера не наблюдается скачков.
Что может вызвать внезапное появление проблемы, подобной этой?Есть ли вероятность, что FileSystemWatcher просто ненадежен ?
Редактировать Я создал тест, в котором создано 1000 файлов.После запуска 3000 записей можно найти в журнале событий.Поэтому я считаю, что о переполнении буфера не может быть и речи?
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 Стресс-тестирование программы несколькими способами и проверка кода снова и снова не выявили проблем.Так что сейчас это невоспроизводимая ошибка, я внесу несколько изменений, чтобы она чаще регистрировалась и отслеживала ситуацию.