【发布时间】:2010-10-01 17:15:44
【问题描述】:
在进程执行期间的特定时间计算总 CPU 使用率的最佳算法是什么。
我正在使用 C++ 工作 Windows 平台。
【问题讨论】:
在进程执行期间的特定时间计算总 CPU 使用率的最佳算法是什么。
我正在使用 C++ 工作 Windows 平台。
【问题讨论】:
获取一段时间内总 CPU 负载的最简单方法是使用GetSystemTimes API。它是从 Windows XP SP1 开始可用的内核函数。它返回自系统启动以来使用的 CPU 时间量。因此,在某个时间间隔内获得的这些值之间的差异将得出该时间间隔内的总 CPU 使用率。
记住,这个函数提供的内核时间包括“空闲”时间,所以你必须从中减去第一个参数返回的空闲时间。
该函数返回所有可用内核/处理器的总时间,因此您可能还需要将增量除以从GetSystemInfo 获得的处理器数量。
【讨论】:
// 声明
PerformanceCounter cpuCounter = null;
// 在构造函数的某处初始化..
cpuCounter = new PerformanceCounter();
cpuCounter.CategoryName = "处理器";
cpuCounter.CounterName = "% 处理器时间";
cpuCounter.InstanceName = "_Total";
然后以 % 为单位获取 CPU 使用率,只需调用
cpuCounter.NextValue()
【讨论】:
GetProcessTimes 用于 100 纳秒分辨率。如果您需要循环时间,请在 Vista 及更高版本中使用 QueryProcessCycleTime。
【讨论】:
让我推荐你这篇很棒的文章:http://www.codeproject.com/KB/threads/Get_CPU_Usage.aspx
我相信你会发现它很有用。
【讨论】:
不要使用 WMI 只需使用win32 NAPI
【讨论】:
使用 WMI 获取“PercentProcessorTime”;请注意,这可能会有自己的性能损失。
如果您希望限制您的应用程序,更好的方法是让您拥有自己的特定于您的应用程序的内部性能指标并基于该指标进行限制(例如屏幕刷新率等)
【讨论】:
英特尔 VTune 是分析 CPU 资源的绝佳工具:http://www.intel.com/cd/software/products/asmo-na/eng/239144.htm
【讨论】: