(Win/C#/.Nette) de l'Applet doit sondage à l'heure d'intervalle des recommandations sur la meilleure méthode?

StackOverflow https://stackoverflow.com/questions/1538925

  •  20-09-2019
  •  | 
  •  

Question

L'Applet doit sondage de l'existence d'un répertoire, disons, tous les 1 à 4 heures, et envoyer quelques e-mails/NET Envoie si il n'est pas trouvé.Pas de certitude sur l'intervalle exact encore, mais il va certainement pas être inférieure à 1 heure.L'ensemble du "travail" sera permanente et continue en cours d'exécution pour l'avenir prévisible.L'Applet sera en cours d'exécution sur un Serveur Win2k3, et sur la base (très léger) de l'utilisateur des modèles d'utilisation, je doute qu'il va interférer en aucune manière notable dans le primaire, les fonctions de serveur, mais juste envie d'être bien éduqués, bien sûr!Considéré comme la mise en œuvre comme une Victoire de Service par la suite, mais pour diverses raisons, d'abord la mise en œuvre sera comme une application console.

La recherche de la mise en œuvre qui seront plus économes en termes d'utilisation des ressources du système, plus précisément le CPU et la RAM. Concernés plus sur le calendrier et d'interrogation de mise en œuvre de vsUtilisation de l'UC. Il n'y aura pas une tonne d'objets, l'interface graphique, etc.créé, de sorte que l'utilisation de la RAM ne devrait pas être un problème, mais dois-je porter une attention particulière à la Collecte des Déchets si je ne l'appliquer comme une longue course .exe (dans les mois/années de sens)?

FileSystemWatcher?
Système.Les minuteries.Minuterie?
Fil de discussion.Le sommeil?
les autres?

En fait, pendant que j'écris ceci, il arrive que l'implémentation la plus simple -- du point de vue de la réutilisation du nombre de "roues" déjà inventé pour ce type de tâche ne sera pas un sondage, mais tout simplement la conception de démarrer, exécuter des actions, et de la fermer, et de laisser de Tâches Planifiées de Windows infrastructure de gérer le déroulement d'aspect.Mais j'ai posté de toute façon pour obtenir la validation de l'idée + d'informations générales pour référence future.TY!

Était-ce utile?

La solution

Tâche Planifiée de Windows est certainement le chemin à parcourir.Et De Fil.Sleep(n) est certainement pas le chemin à parcourir.Un System.Timers.Timer serait la voie à suivre si vous alliez faire cela à partir de votre application, avec un intervalle initial de 3600000.Dans chaque événement Écoulé, vous devez désactiver la Minuterie, faire ce que le code que vous devez faire, puis de le ré-activer le chronomètre avec un Intervalle égal à la prochaine heure-sur-le-heure moins le temps système.Sinon, votre Minuterie dérive hors de synchronisation avec l'heure du système (bien que ce n'est pas pour déplaire à vos besoins, auquel cas, à l'enfer avec elle).

Autres conseils

Utiliser Windows Services de Planification pour planifier l'exécution de votre application console.Faire une vérification simple pour le répertoire à l'aide du Répertoire.Existe et envoyer des e-mails que nécessaire.

J'irais avec la conception qu'il fonctionne comme une tête d'application (enregistrement dans le journal des événements ou votre évier de choix) et de laisser le Planificateur de Tâches de faire son travail et de l'appeler sur l'heure.

Pas besoin de compliquer les choses.

Dans le passé, j'ai géré des tâches comme que de simplement créer une application de console et de l'avoir à l'exécuter à partir d'une Tâche Planifiée de Windows.De cette façon, il peut effectuer son action, puis déchargé de la mémoire.Aussi, il est facile de désactiver temporairement la tâche planifiée, si il y a du travail qui doit être fait sur le serveur (comme les mises à niveau du système).Aussi, le calendrier doit changer (plus/moins souvent), la tâche planifiée interface représente déjà plusieurs pistes.

Nous avons essayé d'écrire des outils similaires, comme les Services de Windows (comme vous l'avez dit une future mise en œuvre peut être), pour plusieurs raisons:

  • Simple d'administration à distance via NET.EXE (et, éventuellement, PowerShell)
  • Facile de surveillance via System Center Operations Manager (anciennement MAMAN)
  • Peut mettre en cache des données/objets si nécessaire
  • La normalisation

Notez que nous avons développé un cadre et un modèle associé pour la création de ces projets;de cette façon, chaque projet ne doit pas avoir à gérer la configuration de l'intervalle d'interrogation, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top