我正在开发一个大型应用程序,希望了解两个时间点之间 CPU 的负载情况。我不仅对我自己的过程感兴趣,而且对所有过程感兴趣。
我的想法是获取两个时间段之间空闲进程的总 CPU 时间。然后将该值与实时差异进行比较。然后可以计算空闲进程上花费的平均 CPU 时间百分比,从而计算实际进程上花费的平均 CPU 时间百分比。
例如:
- 实时样本:2012/07/30 13:56:1 和 2012/07/30 13:56:21
- 空闲进程总 CPU 时间示例:56:23:10 和 56:23:15
- 实时差异:20s
- 空闲进程总CPU时间差异:5s
- 空闲进程中的平均 CPU 时间百分比:25%
- 实际进程中的平均 CPU 时间百分比:75%
为了尽可能减少对性能的影响,我只想取两个样本。一个在开头,一个在结尾。
我也不想查看其他进程来计算总 CPU 负载,只查看空闲进程。 (例如我不想计算其他进程的总CPU时间总和)
我尝试过使用 Kernel32.dll开放进程 http://msdn.microsoft.com/en-us/library/windows/desktop/ms684320%28v=vs.85%29.aspx。但显然您无法访问空闲进程。它抛出 ERROR_ACCESS_DENIED 异常。
这一定是可能的,因为任务管理器显示空闲进程的总 CPU 时间。
注意:我对进程的瞬时 CPU 时间百分比不感兴趣。只有总 CPU 时间才能稍后计算平均值。
您可能正在寻找这样的东西:
static Program
{
private static PerformanceCounter cpuCounter = new PerformanceCounter() {
CategoryName = "Processor",
CounterName = "% Processor Time",
InstanceName = "_Total" };
static void Main()
{
cpuCounter.NextValue();
// Do your processing here.
float totalCpuUsagePercentage = cpuCounter.NextValue();
}
}
然后,totalCpuUsagePercentage 将包含自上次 cpuCounter.NextValue() 以来的总负载百分比。
如果您不需要百分比,可以使用 CounterName = "Processor Time" 代替。
希望这对您的追求有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)