控制CPU利用率

在运行时如何控制CPU利用率?

轮询CPU负载并插入睡眠?

Solutions Collecting From Web of "控制CPU利用率"

我会推荐操作系统的功能。 Windows上有性能计数器和WinAPI函数。

以下是使用BCL团队博客中的 性能计数器的示例:

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()); } } 

此代码来自CodeProject的 WMI相同:

 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);; } 

所以你可以查询这些操作系统提供程序(或其他操作系统),并在处理器利用率很高的情况下休眠你的线程。

最简单的方法是修改主循环,以等待输入 – 传统的事件驱动模型 – 或定期休眠一小段时间。

如果将应用程序设置为睡眠状态,那么只会使用一个非常短的超时,在10-100毫秒范围内的任何地方,并且一些用户输入会被延迟,而更少的操作会涉及更多的操作系统级开销来切换应用程序。