在执行过程中的特定时间,计算总CPU使用率的最佳algorithm是什么?
我正在使用C ++的Windows平台。
GetProcessTimes
为100纳秒的分辨率。 如果您想要循环时间,请在Vista和更高版本中使用QueryProcessCycleTime
。
英特尔VTune是一个很好的分析CPU资源的工具: http : //www.intel.com/cd/software/products/asmo-na/eng/239144.htm
让我推荐你这个伟大的文章: http : //www.codeproject.com/KB/threads/Get_CPU_Usage.aspx
我相信你会发现它有用。
使用WMI来获得“PercentProcessorTime”; 要小心这可能会有其自己的表现的惩罚。
如果您正在寻求遏制您的应用程序,更好的方法是根据您的应用程序制定自己的内部性能指标,并进行节制(例如屏幕刷新率等)
不要使用WMI简单地使用win32 NAPI
// 宣布
PerformanceCounter cpuCounter = null;
//在构造函数中的某个地方初始化..
cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName =“Processor”;
cpuCounter.CounterName =“处理器时间百分比”;
cpuCounter.InstanceName =“_Total”;
然后以%调用CPU占用率
cpuCounter.NextValue()
资料来源:http: //zamov.online.fr/EXHTML/CSharp/CSharp_927308.html
获取一段时间内总CPU负载的最简单方法是使用GetSystemTimes API。 这是一个启动Windows XP SP1的内核函数。 它会返回系统启动后使用的CPU时间。 因此,在一个时间间隔内获得的这些值之间的差异会导致该时间间隔内的总CPU使用率。
请记住,该函数提供的内核时间包括“空闲”时间,因此您必须减去由第一个参数返回的空闲时间。
该函数返回所有核心/处理器可用的总时间,因此您可能还需要将增量除以从GetSystemInfo获得的处理器数量。