Mam zadanie, które chcę uruchomić w kółko. Chcę wywołać to tak szybko, jak to możliwe, jednak chcę, aby moje cykle procesora były niskie. Czytałem, że korzystanie ze snu w pracy w tle nie jest najlepszym wyborem. Jednak bez snu mój procesor zachowuje około 55% procent. Poniżej mam przykład mojego źródła. Jeśli sen jest odpowiedni, to w jaki sposób wybierasz najlepszy czas na sen, jak widzisz na podstawie moich wyników poniżej, otrzymuję różne wyniki w zależności od tego, jak długo śpię. Czy ktoś może dać mi znać, co najlepsze praktyki jest, gdy robi coś podobnegoPraca w tle Uśpienie w celu zmniejszenia 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();
}
W zależności od tego, jak go używasz, może być bardziej odpowiedni zegar. –
Myślałem o czasomierzu, ale moje zadanie trwa od 5 sekund do 5 minut, więc pomyślałem, że osoba pracująca w tle będzie lepszym wyborem. – poco
Dlaczego niepokoi Cię CPU%? Być może wprowadzenie go w wątku o niższym priorytecie byłoby bardziej odpowiednie, jeśli chcesz, aby reszta systemu pozostała responsywna. –