gpt4 book ai didi

c# - 类似于任务管理器获取Windows中空闲进程的总CPU时间

转载 作者:可可西里 更新时间:2023-11-01 10:07:49 27 4
gpt4 key购买 nike

我正在开发一个大型应用程序,想了解两个时间点之间的 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 时间的差异:5 秒
  • 空闲进程中的平均 CPU 时间百分比:25%
  • 实际进程中的平均 CPU 时间百分比:75%

为了尽可能减少对性能的影响,我只想取两个样本。一个在开头,一个在结尾。

我也不想为了计算总 CPU 负载而查看其他进程,只查看空闲进程。 (比如我不想计算其他进程的总CPU时间之和)

我尝试使用 Kernel32.dll OpenProcess .但显然您无法访问空闲进程。它抛出 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"代替。

希望这对您的探索有所帮助。

关于c# - 类似于任务管理器获取Windows中空闲进程的总CPU时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11724907/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com