如何在不等待1秒的情况下对进程的cpu使用进行采样

时间:2014-08-25 15:40:26

标签: c# .net wmi performancecounter

我正在尝试对所有正在运行的进程的cpu使用情况进行采样,但在我发现需要睡眠1秒的所有解决方案中,这是一个问题,因为我想尽可能快地对其进行采样以更新远程服务。 我也尝试使用" PercentProcessorTime"使用WMI查询Win32_PerfFormattedData_PerfProc_Process。但它返回错误的值(是每个处理器吗?)

1 个答案:

答案 0 :(得分:3)

这是不可能的,等待足够长的时间以获得下一个样本是必要。处理器只处于两种状态之一。它要么执行代码,要尽可能快地运行。或者它完全由HLT指令停止,当操作系统的线程调度程序找不到任何工作时,会发生这种情况。每秒64次,时钟中断将其从暂停状态唤醒,调度程序会查看是否有任何可以运行的内容。

perf计数器告诉您自上次对计数器进行采样以来处理器运行满孔的频率与停止的频率。如果你没有等待足够长的时间,那么数字的准确性就开始受到影响。如果等待的时间少于16毫秒,则只能测量0或100%。奈奎斯特 - 香农采样定理的软件版本。

样本之间等待1秒是样板文件,这是你在Perfmon.exe和Taskmgr.exe中看到的