Что лучше использовать для повторяющейся работы: служба или запланированная задача? - PullRequest
4 голосов
/ 16 сентября 2009

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

  1. Напишите приложение командной строки, которое запускает задачу один раз, ждет 30 секунд, снова запускает ее и затем завершает работу. Я могу запланировать выполнение этой задачи с помощью запланированных задач в Windows * каждую минуту

  2. Напишите службу, которая запускает задачу несколько раз, ожидая между ними 30 секунд.

Номер 1, на мой взгляд, более тривиален, и я бы предпочел сделать это по умолчанию. Я потерял сознание? Есть ли причина, почему я должен сделать это Сервисом, а не запланированным заданием? Каковы плюсы и минусы обоих и что бы вы выбрали в конце?

Ответы [ 4 ]

8 голосов
/ 16 сентября 2009

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

/314583/sluzhba-windows-vs-zaplanirovannoe-zadanie Служба Windows или запланированное задание, какое из них мы предпочитаем?

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

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

Очевидно, что есть ряд компромиссов, которые стоит рассмотреть, но, надеюсь, это поможет вам принять правильное решение.

3 голосов
/ 16 сентября 2009

Если вы пытаетесь запускаться каждые 30 секунд, я бы выбрал вариант 2. В этом случае это в значительной степени постоянная работа. Затраты на запуск и остановку процесса, вероятно, выше, чем сам процесс, особенно если вы используете соответствующий таймер.

Если вы выполняете задание, которое выполняется один раз в день (или несколько раз в день), я бы выбрал вариант 1 - использование запланированного задания.

2 голосов
/ 16 сентября 2009

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

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

0 голосов
/ 16 сентября 2009

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

...