C# 控制CPU利用率

C# 控制CPU利用率,c#,windows,C#,Windows,如何在运行时控制cpu利用率 轮询cpu负载并插入休眠?我建议使用操作系统功能。Windows上有用于此的性能计数器和WinAPI函数 下面是一个使用性能计数器的示例,来自: 此代码从以下位置对WMI进行相同的: 因此,如果处理器利用率很高,您可以查询这些操作系统提供程序(或其他操作系统提供程序),并休眠线程。最简单的方法是修改主循环以等待输入(经典的事件驱动模型),或周期性地休眠一小段时间 如果将应用程序置于睡眠状态,我只会使用非常短的超时时间,大约在10-100ms范围内,因为任何更多和一些

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


轮询cpu负载并插入休眠?

我建议使用操作系统功能。Windows上有用于此的性能计数器和WinAPI函数

下面是一个使用性能计数器的示例,来自:

此代码从以下位置对WMI进行相同的


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

最简单的方法是修改主循环以等待输入(经典的事件驱动模型),或周期性地休眠一小段时间


如果将应用程序置于睡眠状态,我只会使用非常短的超时时间,大约在10-100ms范围内,因为任何更多和一些用户输入都会延迟,而任何更少的超时时间都会在切换应用程序时带来更多的操作系统级开销。

谢谢。我想讨论的是,如果“轮询cpu负载并插入休眠”是唯一/最好的选择,那么怎么做呢。
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());   
    }
}
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);;
}