Я бы порекомендовал функциональность ОС. Для этого в Windows есть счетчики производительности и функции WinAPI.
Вот пример использования счетчиков производительности из BCL Team Blog :
foreach (Process proc in Process.GetProcesses()) {
using (PerformanceCounter pcProcess = new PerformanceCounter("Process", "% Processor Time", proc.ProcessName)) {
pcProcess.NextValue();
System.Threading.Thread.Sleep(1000);
Console.WriteLine("Process:{0} CPU% {1}", proc.ProcessName, pcProcess.NextValue());
}
}
Этот код делает то же самое с WMI из CodeProject :
public string GetCPU()
{
decimal PercentProcessorTime=0;
mObject_CPU.Get();
ulong u_newCPU =
(ulong)mObject_CPU.Properties["PercentProcessorTime"].Value;
ulong u_newNano =
(ulong)mObject_CPU.Properties["TimeStamp_Sys100NS"].Value;
decimal d_newCPU = Convert.ToDecimal(u_newCPU);
decimal d_newNano = Convert.ToDecimal(u_newNano);
decimal d_oldCPU = Convert.ToDecimal(u_oldCPU);
decimal d_oldNano = Convert.ToDecimal(u_oldNano);
// Thanks to MSDN for giving me this formula !
PercentProcessorTime =
(1 - ((d_newCPU-d_oldCPU)/(d_newNano - d_oldNano)))*100m;
// Save the values for the next run
u_oldCPU = u_newCPU;
u_oldNano = u_newNano;
return PercentProcessorTime.ToString("N",nfi);;
}
Таким образом, вы можете запросить этих поставщиков ОС (или других для вашей ОС) и перевести ваш поток в спящий режим, если загрузка процессора высока.