我正在开发一个大型应用程序,并希望了解CPU在两个时间点之间的加载方式。我不只是对自己的过程感兴趣,而是对所有过程感兴趣。
我的想法是在两个时间段之间获得空闲进程的总CPU时间。然后将该值与实际时差进行比较。然后可以计算在空闲进程上花费的平均CPU时间百分比,从而计算在实际进程上花费的平均CPU百分比。
例如:
为了尽可能减少性能影响,我只想拍两个样本。一个在开始,一个在结束。
我也不想查看其他进程以计算总CPU负载,只计算空闲进程。 (例如,我不想计算其他进程的总CPU时间总和)
我曾尝试使用Kernel32.dll OpenProcess。但显然你无法访问空闲进程。它会抛出ERROR_ACCESS_DENIED异常。
这必须是可行的,因为任务管理器显示空闲进程的总CPU时间。
注意:我对进程的瞬时%CPU时间不感兴趣。仅计算总CPU时间以便稍后计算平均值。
答案 0 :(得分:3)
你可能正在寻找这样的东西:
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”。
希望这能帮助你完成任务。
答案 1 :(得分:0)
“空闲过程”很可能不存在。
您可以尝试暂停您自己的“空闲进程”,其中包含[no。核心]线程,空闲+ 1优先级,CPU循环,计算经过的时间。这可能有用。
它还可以为您的制冷系统提供一些锻炼和温暖办公室:)