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

C# 如何在不等待1秒的情况下对进程的cpu使用情况进行采样,c#,.net,wmi,performancecounter,C#,.net,Wmi,Performancecounter,我试图对所有正在运行的进程的cpu使用情况进行采样,但在我发现的所有解决方案中,都需要睡眠1秒,这是一个问题,因为我希望尽可能快地采样以更新远程服务。 我还尝试使用WMI查询Win32\u PerfFormattedData\u PerfProc\u进程使用“PercentProcessorTime”。但是它返回了错误的值(是每个处理器吗?这是不可能的,等待足够长的时间来获取下一个样本是必要的。处理器仅处于两种状态之一。它要么在执行代码,要么以尽可能快的速度运行。或者它完全被HLT指令停止,这是

我试图对所有正在运行的进程的cpu使用情况进行采样,但在我发现的所有解决方案中,都需要睡眠1秒,这是一个问题,因为我希望尽可能快地采样以更新远程服务。
我还尝试使用WMI查询Win32\u PerfFormattedData\u PerfProc\u进程使用“PercentProcessorTime”。但是它返回了错误的值(是每个处理器吗?

这是不可能的,等待足够长的时间来获取下一个样本是必要的。处理器仅处于两种状态之一。它要么在执行代码,要么以尽可能快的速度运行。或者它完全被HLT指令停止,这是在操作系统的线程调度程序找不到任何工作要做时发生的。每秒64次,时钟中断将其从停止状态唤醒,调度器将查看是否有任何东西准备好运行

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


样本之间等待1秒是样板,这就是Perfmon.exe和TaskMGR.exe < /P>中你看到的是WMI还是可以考虑一个P/Unjk方法?值得一试,如何能用P/Unjk来完成?你想要一个特定进程或整个系统的平均CPU使用率吗?你正在尝试采样时间。这需要时间,因此您可以对其进行采样。每个正在运行的进程do note taskmgr可以使用0.5秒作为采样间隔。