我想计算两个时间点之间的平均CPU使用率%。
我使用t1-t0和Process.TotalProcessorTime1之间的比率 - Process.TotalProcessorTime0
(其中t是该点的实际DateTime.Now
)
但有时当计算机忙时我得到Ticks中的TotalProcessorTime差异大于通过的实际时间(Ticks),所以我的cpu%超过100。
那怎么可能?long currentLogTime = DateTime.Now.Ticks;
long currentSPUUsageTime = _process.TotalProcessorTime.Ticks;
long timeDiff= currentLogTime - m_LastLogTime;
if (timeDiff != 0)
{
cpuUsage = (currentSPUUsageTime - m_LastCPUUsageTime) * 100 / timeDiff;
}
答案 0 :(得分:4)
如果单个进程使用多个处理器,它可以比实时更快地使用处理器时间。
答案 1 :(得分:1)
DateTime.Now
的分辨率低于TotalProcessorTime
。
您需要使用高分辨率计时器来测量经过的时间。考虑为此目的使用Stopwatch实例。
开始新的“日志周期”时使用StartNew方法:
m_stopwatch = Stopwatch.StartNew();
然后只需阅读ElapsedTicks属性即可确定已经过了多长时间:
long timeDiff= m_stopwatch.ElapsedTicks;