(Win / C # /. Net) Апплет должен опрашивать с почасовым интервалом - рекомендации по лучшему методу?

Апплет должен опросить наличие каталога, скажем, каждые 1-4 часа, и отправить пару электронных писем / NET SENDs, если он не найден. Пока не уверен в точном интервале, но он определенно не будет короче 1 часа. Общая «работа» будет постоянной и продолжительной в обозримом будущем. Апплет будет работать на сервере Win2k3, и, основываясь на (чрезвычайно легких) шаблонах использования пользователями, я сомневаюсь, что он каким-либо заметным образом повлияет на основные функции сервера, но, разумеется, просто хочу, чтобы он работал хорошо! Рассматривается реализация его в качестве службы Win в конце концов, но по разным причинам первая реализация будет в виде консольного приложения.

Поиск реализации, которая будет наиболее экономной с точки зрения использования системных ресурсов, особенно ЦП и ОЗУ. Больше всего беспокоит реализация времени / опроса Использование процессора. Там не будет тонны объектов, графического интерфейса и т. Д. создано, поэтому использование оперативной памяти не должно быть большой проблемой, но нужно ли мне уделять особое внимание сборке мусора, если я все же реализую ее как долгосрочную. Отлично (в смысле месяцев / лет)?

FileSystemWatcher?
Система. Таймеры. Таймер?
Нить. Спать?
Другой?

На самом деле, когда я пишу это, оказывается, что самая простая реализация - с точки зрения повторного использования множества существующих «колес», уже изобретенных для этого типа задач - будет вообще не опрашивать, а просто спроектировать ее для запуска выполните действия, закройте и разрешите инфраструктуре запланированных задач Windows обрабатывать аспекты синхронизации. Но я все равно написал, чтобы получить подтверждение этой идеи + общую информацию для дальнейшего использования. TY!

вопрос задан 8.10.2009
Yes-it-has-overflowed
35 репутация

5 ответов


  • 1 рейтинг

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

    ответ дан Yuriy Faktorovich, с репутацией 52341, 8.10.2009
  • 1 рейтинг

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

    Не нужно слишком усложнять вещи.

    ответ дан 48klocs, с репутацией 5144, 8.10.2009
  • 0 рейтинг

    Мы пытались написать инструменты, аналогичные службам Windows (как вы сказали, может быть в будущем) по нескольким причинам:

    • Простое удаленное администрирование через NET. EXE (и в конечном итоге PowerShell)
    • Простой мониторинг с помощью System Center Operations Manager (ранее MOM)
    • Может кэшировать данные / объекты, если это необходимо.
    • Стандартизация

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

    ответ дан TrueWill, с репутацией 19262, 8.10.2009
  • 0 рейтинг

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

    ответ дан Agent_9191, с репутацией 6355, 8.10.2009
  • 0 рейтинг

    Запланированная задача Windows - определенно путь. И нить. Sleep (n) определенно , а не путь. Если бы вы собирались сделать это из своего приложения, было бы целесообразно использовать System.Timers.Timer с начальным интервалом 3600000. В каждом прошедшем событии вы должны отключить таймер, сделать любой код, который вам нужно сделать, а затем снова включить таймер с интервалом, равным следующему часу за часом, минус текущее системное время. В противном случае ваш таймер будет не синхронизирован с системным временем (хотя это может не иметь значения для ваших целей, в этом случае, к черту).

    ответ дан MusiGenesis, с репутацией 60340, 8.10.2009