如何在C#中获得总处理器时间?

时间:2011-04-20 23:19:02

标签: c# .net visual-studio process cpu-usage

我已经研究了很多,但我能找到的只是如何获得一个单一的处理时间。

Process p = exampleProcess
return p.TotalProcessorTime

如何获得总处理器时间?如果我执行以下操作,是否会获得该进程的%CPU使用率:

return p/totalProcessorTime

3 个答案:

答案 0 :(得分:2)

不,你不能用Timespan划分一个进程。 TotalProcessorTime是衡量执行代码实际花费的时间。这是一个绝对数字。如果需要相对数,则需要测量进程运行的时间。从ExitTime中减去StartTime。像这样:

        Process prc = /* something */
        var wallTime = DateTime.Now - prc.StartTime;
        if (prc.HasExited) wallTime = prc.ExitTime - prc.StartTime;
        var procTime = prc.TotalProcessorTime;
        var cpuUsage = 100 * procTime.TotalMilliseconds / wallTime.TotalMilliseconds;

答案 1 :(得分:1)

您可以使用PerformanceCounter

PerformanceCounter cpuCounter = new PerformanceCounter("Process", "% Processor Time", p.ProcessName);
double currentCpuPercent = cpuCounter.NextValue();

答案 2 :(得分:0)

您希望总处理器时间(不限于单个进程)正确吗?这是否意味着您需要系统上所有进程的处理器时间?这与系统启动后经过的墙壁时间不一样吗?如果是这样,GetTickCount64就可以了。