файловая система как служба Windows? - PullRequest
8 голосов
/ 20 октября 2010

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

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

Кто-нибудь может порекомендовать лучший способ реализации файловой системыwatcher, чем служба Windows?

спасибо за любые мысли.

EDIT в ответ на комментарии ниже, в частности, мне просто нужно посмотреть каталог на сервере, а когда создается новый файл, мне нужно переместить копию этого файла в другой каталог на том же сервере, возможно, переименовав в процессе.

Частота и количество файлов будет довольно небольшим. возможно 5-10 максимум за день.

Ответы [ 4 ]

3 голосов
/ 13 мая 2011

Я пока не уверен, как работает средство просмотра файлов, но вот что я думаю: файловая система запускает события;Я имею в виду, что NTFS должна это делать.Ваш наблюдатель за файлами подключается к этим событиям.Наблюдатель за файлами, вероятно, приостанавливает поток, в котором он работает, до тех пор, пока не произойдет событие, и событие каким-то образом разбудит поток.Приостановленный поток использует очень мало циклов ЦП (фактически ни одного), пока он приостановлен, поэтому ожидание события файла ничего не стоит.Таким образом, опрашиваемый подход тратит впустую многократный цикл (это по-французски означает «дерьмовая загрузка») циклов ЦП, а средство просмотра файлов - нет.Возможно, вы могли бы взглянуть на PerfMon, чтобы убедиться, что это правда.

2 голосов
/ 20 октября 2010

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

При желании вы можете использовать Remoting для подключения внешнего интерфейса к вашему сервису.

1 голос
/ 20 октября 2010

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

Перед попыткой переместить файл убедитесь, что запись файла завершена и он больше не заблокирован.

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

While True 'or your exit condition'
 Dim _files() as FileInfo = Directory.GetFiles(yourTargetDirectory)
 For Each _file as FileInfo In _files
  If _file.LastModifiedDate < DateTime.Now.AddMinutes(1) Then
    'move your files'
  End If
 Next

End While
0 голосов
/ 20 октября 2010

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

FSW - это правильный инструмент для работы (нативный код для просмотра файловой системы - правильный выбор), а сервис - это правильный механизм для его развертывания, если вам нужна операция «всегда включен».

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

...