FileSystemWatcher против опроса, чтобы наблюдать за изменениями файла

Единственная необходимость использовать квалификатор this. - это когда другая переменная в текущей области имеет одно имя и вы хотите обратиться к члену экземпляра (как описывает Уильям). Кроме того, нет разницы в поведении между x и this.x.

143
задан Stein Åsmul 21 April 2014 в 19:04
поделиться

9 ответов

Я видел, что наблюдатель файловой системы перестал работать в продуктивных и тестовых средах. Я теперь считаю его удобством, но я не считаю его надежным. Мой шаблон должен был наблюдать за изменениями с наблюдателем файловой системы, но опросом иногда для ловли недостающих изменений файла.

Редактирование: Если у Вас есть UI, можно также дать пользователю способность "обновиться" для изменений вместо опроса. Я объединил бы это с наблюдателем файловой системы.

105
ответ дан Jason Jackson 21 April 2014 в 19:04
поделиться
  • 1
    Обратите внимание на это в Xcode 5, центральный редактор pane' s строка меню (где Вы видите Общий, Возможности, Информация, и т.д.) имеет немного " play" треугольный значок, который показывает/скрывает область Projects и Targets List. Необходимо нажать это для открытия его, тогда Вы можете длинный щелчок объект, чтобы изменить его имя. – Alan 19 March 2014 в 00:22

Лично, я использовал FileSystemWatcher в производственной системе, и она хорошо работала. За прошлые 6 месяцев это не имело единственного выполнения отклонения 24x7. Это контролирует единственную локальную папку (который совместно используется). Мы имеем относительно небольшое количество операций файла, которые оно должно обработать (10 событий, запущенных в день). Это не что-то, о чем я должен был когда-либо волноваться. Я использовал бы его снова, если бы я должен был переделать решение.

11
ответ дан bluish 21 April 2014 в 19:04
поделиться

Эти FileSystemWatcher может также пропустить изменения в течение напряженного времени, если количество изменений с очередями переполняет обеспеченного буфера. Это не ограничение класса.NET по сути, но базовой инфраструктуры Win32. По нашему опыту, лучший способ минимизировать эту проблему состоит в том, чтобы исключить из очереди уведомления как можно быстрее и соглашение с ними на другом потоке.

, Как упомянуто @ChillTemp выше, наблюдатель не может работать над долями не-Windows. Например, это не будет работать вообще над смонтированными дисками Novell.

я соглашаюсь, что хороший компромисс должен сделать случайный опрос для взятия любых пропущенных изменений.

34
ответ дан bluish 21 April 2014 в 19:04
поделиться

Также обратите внимание, что наблюдатель файловой системы не надежен на долях файла. Особенно, если доля файла размещается на сервере не-Windows. FSW не должен использоваться ни для чего критического. Или должен использоваться со случайным опросом, чтобы проверить, что он ничего не пропустил.

17
ответ дан chilltemp 21 April 2014 в 19:04
поделиться

У меня были некоторые большие проблемы с FSW на сетевых дисках: Удаление файла всегда бросало ошибочное событие, никогда удаленное событие. Я не нашел решение, таким образом, я теперь избегаю опрос использования и FSW.

события Creation, с другой стороны, хорошо работали, поэтому если только необходимо наблюдать за созданием файла, можно пойти для FSW.

кроме того, у меня не было проблем вообще на локальных папках, неважно, если совместно использовано или нет.

3
ответ дан Treb 21 April 2014 в 19:04
поделиться

Я столкнулся с проблемой с помощью FileSystemWatcher на сетевых ресурсах. Если Вы находитесь в чистой среде Windows, это не могла бы быть проблема, но я наблюдал долю NFS и так как NFS является не сохраняющим состояние, никогда не было уведомления, когда файл я смотрел измененный.

5
ответ дан bluish 21 April 2014 в 19:04
поделиться

Я в настоящее время использую FileSystemWatcher на XML-файле, обновляемом в среднем каждые 100 миллисекунд.

я нашел, что пока эти FileSystemWatcher правильно настроен, у Вас никогда не должно быть проблем с локальный файлы.

у меня нет опыта в удаленном наблюдении файла и долях не-Windows.

я полагал бы, что опрос файла избыточен и не стоит издержек, если Вы по сути не не доверяете FileSystemWatcher или непосредственно испытали ограничения, все остальные здесь перечислили (доли не-Windows и удаленное наблюдение файла).

7
ответ дан bluish 21 April 2014 в 19:04
поделиться
  • 1
    Что относительно реверса (PCM к WAV) операция? – mustafa.yavuz 18 July 2013 в 09:26

Я пошел бы с опросом.

Сетевые проблемы заставляют FileSystemWatcher быть ненадежными (перегружая ошибочное событие).

5
ответ дан bluish 21 April 2014 в 19:04
поделиться

Самая большая проблема, с которой я столкнулся, - это отсутствие файлов при заполнении буфера. Исправить как пирог - просто увеличьте буфер. Помните, что он содержит имена файлов и события, поэтому увеличьте его до ожидаемого количества файлов (методом проб и ошибок). Он действительно использует память, которая не может быть выгружена, поэтому может заставить другие процессы обращаться к страницам, если память становится мало.

Вот статья MSDN о буфере: FileSystemWatcher .. ::. InternalBufferSize Свойство

Согласно MSDN:

Увеличение размера буфера является дорогостоящим, поскольку оно происходит из невыгружаемой памяти, которую нельзя выгружать на диск, поэтому сохраняйте размер буфера как можно меньше. Чтобы избежать переполнения буфера, используйте свойства NotifyFilter и IncludeSubdirectories, чтобы отфильтровать нежелательные уведомления об изменениях.

Мы используем 16 МБ, так как единовременно ожидается большой пакет. Работает нормально и никогда не пропускает файл.

Мы также читаем все файлы перед тем, как начать обработку даже одного ... получить имена файлов в безопасном кэше (в нашем случае в таблице базы данных), а затем обработать их.

Для проблем с блокировкой файлов я вызываю процесс, который ждет разблокировки файла одну секунду, затем две, затем четыре и так далее. Мы никогда не опрашиваем.

60
ответ дан 23 November 2019 в 22:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: