准确确定每个进程的CPU使用率

时间:2017-09-17 02:35:22

标签: windows performance cpu-usage

我正在编写一个程序,需要知道每个进程使用多少CPU时间才能达到合理的准确度。正如任务管理器或Process Explorer一样准确。

使用Kernel32 GetProcessTimes会导致准确性降低。对于消耗很少CPU时间的进程,两次调用之间的差异通常为0(即使在几秒钟的时间内测量)。然而,任务管理器和进程资源管理器都提供了更精确的测量结果,表明在我的测量间隔期间,该过程确实消耗了一些 cpu时间。

GetProcessTimes的这种不准确性显然是因为:

  1. 它只计算完全使用的时间片
  2. Windows调度程序使用的时间片似乎是15.625毫秒(1/64秒),这是永恒的......
  3. 我一直在研究使用函数QueryProcessCycleTime,主要是因为Process Explorer显示了查看进程时使用的周期数。属性性能选项卡。即使在Process Explorer中," Time"计数器似乎有15毫秒的分辨率,但周期计数器似乎有更高的分辨率(换句话说,它不会计算一些固定的数字,如15.625毫秒)。

    我的问题是,我无法找到有关如何将处理器周期数与实际花费的时间相关联的任何信息。没有功能可以获得处理器周期的总数(我意识到) - 并且通过频率调整和低功耗模式,这可能非常棘手 - 我看到的唯一选择是将所有周期相加从所有进程(需要管理权限来获取系统进程的进程)来获取总数,这将允许我计算单个进程使用的CPU ...

    那么,是否有人对任务管理器/ Process Explorer如何完成准确的CPU%测量或任何其他我可以探索以获得准确CPU时间的选项有所了解?

0 个答案:

没有答案