控制CPU利用率

时间:2008-11-04 06:39:52

标签: c# windows

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

轮询cpu加载并插入睡眠?

2 个答案:

答案 0 :(得分:4)

我推荐操作系统功能。 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());   
    }
}

此代码与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);;
}

因此,如果处理器利用率很高,您可以查询这些操作系统提供程序(或其他操作系统)并让您的线程休眠。

答案 1 :(得分:0)

最简单的方法是修改您的主循环要么等待输入 - 经典事件驱动的模型 - 或周期性睡的短时间内

如果把睡觉我只会用很短的超时,10-100ms范围内某处应用为更多的和一些用户输入将被推迟,任何少会在切换应用程序中涉及到很多操作系统级别的开销