C# 获取Windows中空闲进程的CPU总时间,类似于任务管理器
我正在开发一个大型应用程序,希望了解CPU在两个时间点之间的负载情况。我不仅对自己的流程感兴趣,而且对所有流程都感兴趣 我的想法是获得两个时间段之间空闲进程的CPU总时间。然后将该值与实时差值进行比较。然后,可以计算空闲进程上花费的平均%CPU时间,从而计算实际进程上花费的平均%CPU时间 例如:C# 获取Windows中空闲进程的CPU总时间,类似于任务管理器,c#,windows,C#,Windows,我正在开发一个大型应用程序,希望了解CPU在两个时间点之间的负载情况。我不仅对自己的流程感兴趣,而且对所有流程都感兴趣 我的想法是获得两个时间段之间空闲进程的CPU总时间。然后将该值与实时差值进行比较。然后,可以计算空闲进程上花费的平均%CPU时间,从而计算实际进程上花费的平均%CPU时间 例如: 实时样本:2012/07/30 13:56:1和2012/07/30 13:56:21 空闲进程总CPU时间示例:56:23:10和56:23:15 实时性差异:20秒 空闲进程总CPU时间差异:5
- 实时样本:2012/07/30 13:56:1和2012/07/30 13:56:21
- 空闲进程总CPU时间示例:56:23:10和56:23:15
- 实时性差异:20秒
- 空闲进程总CPU时间差异:5s
- 空闲进程中CPU时间的平均百分比:25%
- 实际进程中的平均CPU时间百分比:75%
注意:我对进程的瞬时CPU时间百分比不感兴趣。仅计算总CPU时间,以便以后计算平均值。空闲进程很可能不存在 您可以尝试使用自己的“空闲进程”,该进程包含[no.of cores]线程、空闲+1优先级、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=“处理器时间”代替
希望这能帮助您完成任务。记住使用System.Diagnostics;空闲进程在某种程度上确实存在。您可以使用ProcessID为0的内核32 API调用OpenProcess访问它。但是,您不能从用户空间应用程序访问它,因为它是一个受保护的进程。但是任务管理器可以以某种方式访问这些信息。我想知道任务经理是如何做到这一点的。我正在寻找一个低影响优雅的解决方案,虽然。。。