Domanda

Ho un'attività che deve essere eseguita ogni 30 secondi. Posso fare una delle due cose:

  1. Scrivi un'app da riga di comando che esegue l'attività una volta, attende 30 secondi, la esegue di nuovo e quindi esce. Posso pianificare questa attività con Attività pianificate in Windows per l'esecuzione ogni minuto

  2. Scrivi un servizio che esegue ripetutamente un'attività mentre attendi 30 secondi tra ogni esecuzione.

Il numero 1 è più banale, secondo me e sceglierei di farlo in modo predefinito. Sto svanendo? C'è un motivo per cui dovrei rendere questo un servizio e non un'attività pianificata? Quali sono i pro e i contro di entrambi e quali sceglieresti alla fine?

È stato utile?

Soluzione

Di recente ho letto un bel post sul blog su questa domanda . Ci sono molte buone ragioni per cui non dovresti non scrivere un servizio per eseguire un lavoro ricorrente. Inoltre, questa domanda è stata posta prima:

https://stackoverflow.com/questions / 390307 / windows-service-vs-programma-task Servizio Windows o attività pianificata, quale preferiamo?

Uno dei vantaggi dell'utilizzo dell'attività pianificata è che se esiste un rischio potenziale associato all'esecuzione del servizio come una perdita di memoria o una connessione di rete sospesa, il servizio Windows può potenzialmente rimanere sospeso per un lungo periodo, influendo negativamente su altri utenti. D'altra parte, l'attività pianificata è scritta per essere di breve durata, quindi anche se perde, l'effetto è ridotto al minimo.

D'altra parte, qualcuno in una delle domande precedenti ha commentato che lo scheduler ha un limite di accuratezza da qualche parte nell'intervallo di 1 minuto, quindi potresti vedere che lo scheduler non è in grado di eseguire l'attività ogni 30 secondi con la precisione.

Ovviamente ci sono una serie di compromessi da considerare, ma spero che questo ti aiuterà a prendere una buona decisione.

Altri suggerimenti

Se stai cercando di eseguire ogni 30 secondi, sceglierei l'opzione 2. In questo caso è praticamente un lavoro in esecuzione continua. Il sovraccarico dell'avvio e dell'arresto del processo è probabilmente maggiore del processo stesso, soprattutto se si utilizza un timer appropriato.

Se realizzi un lavoro in esecuzione una volta al giorno (o alcune volte al giorno), sceglierei l'opzione 1 - utilizzando un'attività pianificata.

A mio avviso, l'utilità di pianificazione in Windows sembra un po 'instabile. Penso che otterresti un risultato più affidabile in esecuzione come servizio.

Inoltre, un servizio potrebbe conservare le risorse in memoria, come leggere l'input da un file, e deve farlo solo all'avvio del servizio, non ogni 30 secondi.

30 secondi è un intervallo piuttosto breve (relativamente parlando) tra i cicli di elaborazione. Come gli altri, ho le mie preoccupazioni sull'utilità di pianificazione e temo che un intervallo così breve aggraverà solo i problemi che potresti incontrare se avessi adottato questo approccio. Se questo fosse il mio progetto, quasi sicuramente andrei con il servizio.

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