(Win/C#/.Net) Applet deve sondaggio all'intervallo orario - consigli sul metodo migliore?

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

  •  20-09-2019
  •  | 
  •  

Domanda

Applet deve sondaggio per l'esistenza di una directory, per dire, ogni 1-4 ore, e mandare un paio di messaggi di posta elettronica/NET Invia se non viene trovato.Non sono sicuro sul esatto intervallo di sicurezza, ma non sarà sicuramente inferiore a 1 ora.Il complesso "lavoro" sarà permanente e continuo con esecuzione per il prossimo futuro.Applet sarà in esecuzione su un Win2k3 Server e basato su (molto leggero) utente modelli di utilizzo, dubito che possa interferire in qualsiasi modo evidente con il server primario funzioni, ma vogliono solo essere ben educati, naturalmente!Considerato l'implementazione di come Vincere Servizio alla fine, ma per vari motivi, primo attuazione sarà un'applicazione console.

In cerca di attuazione che saranno più snelle ed efficienti in termini di utilizzo di risorse del sistema, in particolare CPU e RAM. Interessato di più i tempi di polling attuazione vsL'utilizzo della CPU. Non ci sarà un sacco di oggetti, GUI, ecc.creato, in modo che l'utilizzo della RAM non dovrebbe essere un grande problema, ma ho bisogno di dare una considerazione speciale per la Garbage Collection se faccio attuare il più lungo in esecuzione .exe (nei mesi/anni senso)?

FileSystemWatcher?
Sistema.Timer.Timer?
Thread.Il sonno?
altri?

In realtà, mentre scrivo questo, si verifica che l'implementazione più semplice, dal punto di vista del riutilizzo dei tanti "ruote" già inventato per questo tipo di compito, sarà quello di non sondaggio a tutti, ma semplicemente di progettazione per iniziare, eseguire azioni e chiudere, e lasciare che le Attività Pianificate di Windows infrastruttura di gestire l'aspetto tempi.Ma ho postato, comunque, per ottenere la convalida di tale idea + info generali per riferimento futuro.TY!

È stato utile?

Soluzione

Pianificate di Windows Compito è sicuramente la strada da percorrere.E Filo.Sonno(n) è sicuramente non la strada da percorrere.Un System.Timers.Timer sarebbe il modo per andare se si stavano per farlo dall'interno dell'applicazione, con un intervallo iniziale di 3600000.In ogni evento Elapsed, è necessario disattivare il Timer, fare tutto il codice che devi fare, poi ri-attivare il Timer con Intervallo pari per la prossima ora in ora meno l'ora di sistema corrente.Altrimenti il Timer deriva sincronizzato con l'ora di sistema (anche se questo potrebbe non importa per i tuoi scopi, nel qual caso all'inferno).

Altri suggerimenti

Uso Windows Servizi di Pianificazione per pianificare l'esecuzione di console app.Fare un semplice controllo per la directory utilizzando la Directory.Esiste e inviare e-mail come necessario.

Mi piacerebbe andare con la progettazione per l'esecuzione come un headless applicazione (registrazione, nel registro eventi o il lavandino di scelta) e lasciando l'utilità di fare il suo lavoro e la chiamano ora.

Non c'è bisogno di complichino ulteriormente le cose.

In passato ho gestito attività come che semplicemente creando un applicazione console e dopo aver eseguito una Operazione Pianificata Windows.In questo modo è possibile eseguire la sua azione e poi scaricato dalla memoria.Inoltre, è facile per disattivare temporaneamente l'attività pianificata, se c'è un lavoro che deve essere fatto per il server (come gli aggiornamenti del sistema).Inoltre, la pianificazione deve cambiare (più/meno spesso), l'attività pianificata interfaccia già i conti per più sedute.

Abbiamo cercato di scrivere simili strumenti come Servizi di Windows (come hai detto tu una futura implementazione) per diversi motivi:

  • Semplice amministrazione remota via NET.EXE (e, infine, PowerShell)
  • Facile monitoraggio via System Center Operations Manager (già MAMMA)
  • È possibile memorizzare nella cache i dati/oggetti, se necessario
  • Standardizzazione

Nota che abbiamo sviluppato un quadro di riferimento e modello associato per la creazione di questi progetti;così ogni progetto non deve gestire la configurazione dell'intervallo di polling, etc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top