Process.TotalProcessorTime超过实际传递时间

时间:2011-06-06 14:40:37

标签: c# .net

我想计算两个时间点之间的平均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;
}

2 个答案:

答案 0 :(得分:4)

如果单个进程使用多个处理器,它可以比实时更快地使用处理器时间。

答案 1 :(得分:1)

DateTime.Now的分辨率低于TotalProcessorTime

您需要使用高分辨率计时器来测量经过的时间。考虑为此目的使用Stopwatch实例。

开始新的“日志周期”时使用StartNew方法:

        m_stopwatch = Stopwatch.StartNew();

然后只需阅读ElapsedTicks属性即可确定已经过了多长时间:

        long timeDiff= m_stopwatch.ElapsedTicks;