Будет ли более эффективным просмотр файла на предмет изменений или избыточный запрос этого файла? - PullRequest
0 голосов
/ 09 июня 2010

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

  1. Просмотр каталогов с помощью FileSystemWatcher.
  2. Запустить синхронизированный поток с интервалом, который проходит, и вручную проверить это.
  3. Проверять вручную каждый раз, когда запускается поток actionhandler (программа иногда что-то делает с действием).

Есть предложения?

Спасибо!

badPanda

Ответы [ 5 ]

6 голосов
/ 09 июня 2010

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

3 голосов
/ 09 июня 2010

Я использовал класс FileSystemWatcher для просмотра изменений файла * .txt в сотнях каталогов без проблем с производительностью.Поэтому я думаю, что это лучшее решение.

2 голосов
/ 09 июня 2010

Вы хотите перейти с FileSystemWatcher .Это то, для чего предназначен этот объект.Он был разработан и протестирован для широкого использования.Все, что вы пишете, не будет подвергаться тщательному тестированию и оптимизации.Нет необходимости заново изобретать колесо, когда это не нужно.

1 голос
/ 09 июня 2010

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

  1. Обычно ваша программа неактивна (то есть в состоянии, когда знание об изменениях в файлах не требуется) в течение длительных периодов времени.
  2. Маловероятно, что файл / каталог изменится, когда программа активна (кроме самой программы, которая не требует уведомления).
  3. Вас беспокоит только небольшое количество файлов.

Даже в этом случае FileSystemWatcher хорошо даже в этом случае.

1 голос
/ 09 июня 2010

В крупномасштабном проекте передачи файлов, над которым я сейчас работаю (по всей стране), FileSystemWatcher был односторонним вариантом (с некоторым управлением блокировками файлов, очередями событий и т. Д.).У вас есть так много преимуществ при использовании базовых конструкций ОС (обеспечивающих все это взаимодействие на основе событий), что я не думаю, что в противном случае вы достигнете такого эффективного поведения.

...