Servicio de Windows con multiples temporizadores

Recibí un servicio de Windows escrito por un interno anterior en mi pasantía actual que supervisa un archivo y alerta a personas específicas a través de correos electrónicos y ventanas emergentes en caso de que uno de los valores registrados salga de un cierto rango. Actualmente utiliza un temporizador para revisar el archivo cada 30 segundos, y me han preguntado si podría actualizarlo para permitir una elección de tiempo dependiendo de qué “etiqueta” se esté monitoreando. Utiliza un archivo XML para realizar un seguimiento de qué tags se están supervisando. ¿La creación de múltiples temporizadores en el servicio sería la forma más eficiente de hacer esto? No estoy muy seguro de qué enfoque tomar.

El servicio está escrito en C # usando .NET 3.5.

Dependiendo de la granularidad, puede usar un solo temporizador que sea un factor común de los intervalos de tiempo que desean. Digamos que quieren poner en el archivo XML que cada archivo debe revisarse cada cierto tiempo. Usted configura un temporizador que se apaga una vez por minuto, y verifica cuánto tiempo ha pasado desde que hizo cada uno y si hacerlo o no.

Si tiene la oportunidad de volver a diseñar, me mudaría de un servicio a un conjunto de tareas progtwigdas. Escríbelo para que una tarea haga un archivo. Luego, escriba un progtwig de controlador que configure las tareas progtwigdas (y puede detenerlas, cambiarlas, etc.) La API para tareas progtwigdas en Windows 7 es agradable y comprensible, ya diferencia de un servicio, puede imponer restricciones como “no lo haga si la computadora está en la batería “o” solo hágalo si la máquina está inactiva “junto con sus preferencias sobre qué hacer si se perdió la oportunidad de ejecutar la tarea. 7 u 8 tareas progtwigdas, cada una en su propio horario, usando su misma API, pasar la ruta del archivo y la dirección de correo electrónico, es mucho más ordenado que un servicio que intenta hacer malabares con todo a la vez. Además, la máquina se iniciará más rápido cuando no tenga otro servicio de inicio automático.

¿Eficiente? Posiblemente no, especialmente si tiene muchas tags, ya que cada temporizador requiere una cantidad pequeña pero limitada de recursos.

Un enfoque alternativo podría ser tener un temporizador que se dispara cada segundo, y cuando eso sucede, usted verifica una lista de solicitudes pendientes.

Esto tiene la ventaja de ser más fácil de depurar si las cosas van mal, ya que solo hay un hilo activo.

Sin embargo, como en la mayoría de las situaciones de mantenimiento de código, depende de su código existente, su capacidad y de cómo se sienta más cómodo.

Yo sugeriría usar solo un temporizador progtwigdo en el divisor menos común.

Por ejemplo, configure su temporizador para que señale cada segundo y puede manejar cada intervalo (1 segundo, 2 segundos, …) contando el número correspondiente de tics del temporizador.