PDA

View Full Version : [C# WinForm] Thread.Sleep() VS Timer() su una serie di azioni nel tempo


qwerty_race
23-02-2022, 09:16
Buongiorno,
ho un dubbio che mi perseguita, credo di avere fatto un errore di programmazione, mi piacerebbe sapere il vostro parere:
In un progetto WinForm in C# ho da eseguire un certo numero di azioni ripetitive in un certo lasso di tempo, faccio un esempio:
Da un database estraggo dei parametri con i quali devo fare delle azioni, possono variare nel numero, da 30 a 500 circa, per ogni ciclo e quindi ogni azione deve esserci una pausa che puņ variare da 10 minuti ad 1 ora, sotto ho messo la struttura sintetizzata di come eseguo queste azioni:


string[] myParam = dbManager.GetActionList();

foreach (string param in myParam)
{
myAction(param);
Thread.Sleep(***); //da 15 minuti ad 1 ora
}


private void myAction(string _param)
{
//le azioni che devo fare
// **
// **
}


Volevo chiedervi se č un approccio sbagliato questo, sarebbe meglio gestire il tutto con un Timer che richiama myAction() e togliere la pausa? Oppure č indifferente?

Grazie molte per qualsiasi consiglio.

antonio338
26-02-2022, 13:53
Ti consiglio assolutamente di usare un timer per una pausa cosi lunga.
Non ha senso impegnare un thread per metterlo in attesa cosi tanto.

qwerty_race
26-02-2022, 14:53
Un Thread in Sleep cosa impegna?

O meglio, se ci fossero 100 Thread aperti in Sleep cosa impegnerebbero, RAM CPU o nulla?

antonio338
26-02-2022, 15:49
Un Thread in Sleep cosa impegna?

O meglio, se ci fossero 100 Thread aperti in Sleep cosa impegnerebbero, RAM CPU o nulla?

Il fatto č che aprire un nuovo thread č un'operazione dispendiosa dal punto di vista delle risorse, al punto che persino lo stesso CLR dedica un thread pool inizialmente limitato e tenta di riutilizzare gli stessi thread e ne apre uno nuovo solo se proprio quelli a disposizione sono tutti impegnati.
Perciņ bisogna tentare di utilizzare i thread solo per il tempo necessario ed evitare di tenerli inutilmente in sleep.
La cpu e memoria impegnata dipendono molto dal compito assegnato un thread, ma rispetto ad un efficiente e semplice Timer a mio parere non sono proprio la scelta da fare per adempiere al tuo compito.

qwerty_race
26-02-2022, 21:42
Ok, ora č chiarissimo, provvedo a fare una modifica, ti ringrazio!