Tengo una tarea que quiero ejecutar una y otra vez. Quiero llamar esto lo más rápido posible, sin embargo, quiero mantener mis ciclos de CPU bajos. He leído usando Sleep en un backgroundworker no es la mejor opción. Sin embargo, sin dormir, mi CPU permanece alrededor del 55% por ciento. Tengo un ejemplo de mi fuente a continuación. Si dormir es lo apropiado, ¿cómo elegir el mejor momento para dormir? Como puede ver en mis resultados a continuación, obtengo resultados diferentes según el tiempo que duermo. ¿Puede alguien que me haga saber lo que es la mejor práctica cuando se hace algo similarBackgroundworker Sleep para reducir la CPU
BackgroundWorker _Worker = new BackgroundWorker()
{
WorkerReportsProgress = true,
WorkerSupportsCancellation = true
};
void Worker_DoWork(object sender, DoWorkEventArgs e)
{
// do my task here
// if i uncomment one of the Sleep below I reduce the CPU like so
// no sleep CPU = 52-58%
// Thread.Sleep(1); CPU = 09-15%
// Thread.Sleep(10); CPU = 02-03%
// Thread.Sleep(100); CPU = 00-01%
}
void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled) { return; }
_Worker.RunWorkerAsync();
}
Según el uso que le dé, tal vez un temporizador sea más apropiado. –
Pensé en el temporizador pero mi tarea tarda de 5 segundos a 5 minutos en completarse, así que pensé que un trabajador de segundo plano sería una mejor opción. – poco
¿Por qué le preocupa la CPU%? Tal vez ponerlo en un hilo de menor prioridad sería más apropiado si desea asegurarse de que el resto del sistema siga siendo receptivo. –