Attualmente sto pianificando un servizio di Windows. Sarà un'applicazione multi-thread che controllerà continuamente i record del database e li elaborerà. I miei primi pensieri erano di impostare un numero massimo di thread disponibili e creare un nuovo thread per ogni processo. Funziona bene ma, poiché sto creando un nuovo thread per ogni nuovo processo, temo che il suo overhead si moltiplica se ci sono molti record da elaborare. La mia domanda è, è un buon design o consiglieresti qualche altra soluzione?
Ecco cosa farà l'applicazione in pratica:
- Verifica il numero di thread disponibili
- Se ci sono thread disponibili controlla il database per i record da elaborare.
- Se ci sono record da elaborare, seleziona i primi 100 di essi
- Crea un nuovo processo
- Chiama un servizio web per ogni record e aggiorna il record in base al risultato della chiamata del servizio web (questa chiamata + aggiornamento richiede in genere circa 500ms, quindi il processo sarà attivo per circa 50 secondi)
- Continua al passaggio 1
Questo è ciò che sto facendo:
timer1.Tick += Tick();
private void Tick()
{
//do some text logging
//do some TextBox updating
}
int MaxThreads = 10
while(true)
{
if(ThreadCount < MaxThreads)
{
new Thread(() => Process()).Start();
ThreadCount++;
}
else
{
Thread.Sleep(10000);
}
}
private void Process()
{
//call ws
//update records
ThreadCount--;
}