【问题标题】:How to get total CPU usage (all processes)? (C#)如何获得总 CPU 使用率(所有进程)? (C#)
【发布时间】:2018-07-05 13:52:26
【问题描述】:

在 Windows 应用程序中,如何获取 C# 中所有内核上所有进程(不仅仅是一个进程或应用程序)的总当前 CPU 使用率? (尽可能不使用任何第三方库)

我只能找到有关单个进程的 CPU 使用率的问题和答案。例如,this one 似乎只询问正在运行的程序的 CPU 使用率,而答案不清楚他们的代码收集了哪些信息,因此在这种情况下它不是很有帮助。

不过,如果这个问题在其他地方得到回答,我会很乐意接受一个链接。

谢谢!

【问题讨论】:

  • 您需要在循环旁边使用PerformanceCounter 类来检索所有进程
  • 如果您已经确定了单个进程,那么下一步应该很容易找到所有正在运行的进程,然后获取所有使用情况......
  • 试试看,("Processor", "% Processor Time", "_Total"); 的答案应该是总CPU(是的,答案不是问题所要求的)
  • @BenVoigt - 鉴于问题的措辞不佳,即使完整阅读,它似乎也不会问我的问题。最重要的是,答案似乎无法区分两者。因此,有人问我的问题并不清楚答案就在那个问题中。事实上,给人的印象恰恰相反。重复是在别处明确提出的问题,而不是在看似不相关的问题中可能找到不明确答案的问题。

标签: c# windows visual-studio cpu-usage


【解决方案1】:

当您使用PerformanceCounter 类时,NextValue() 方法的第一次调用很可能会返回 0。因此,您应该在延迟一段时间后调用它几次以获得适当的度量。

你需要:

using System.Diagnostics;
using System.Threading;

那么你可以通过以下方式获取:

static void Main(string[] args)
{
    var cpuUsage = new PerformanceCounter("Processor", "% Processor Time", "_Total");
    Thread.Sleep(1000);
    var firstCall = cpuUsage.NextValue();

    for (int i = 0; i < 5; i++)
    {
        Thread.Sleep(1000);
        Console.WriteLine(cpuUsage.NextValue() + "%");
    }

    Console.Read();
}

【讨论】:

  • NextValue() 的第一次通话非常有帮助!谢谢!
  • 与我电脑上的任务管理器相比,这些值看起来大约是一半。奇怪。
【解决方案2】:
using (PerformanceCounter system_cpu_usage = new PerformanceCounter("Processor", "% Processor Time", "_Total"))
            {
                var first = system_cpu_usage.NextValue();
                Thread.Sleep(2500);
                // Do something
                
            }

您必须包含 var first = system_cpu_usage.NextValue(); 才能继续显示实际值。

【讨论】:

  • 第一个答案已包含此信息,但感谢您的肯定!
猜你喜欢
  • 2014-07-04
  • 2012-03-03
  • 1970-01-01
  • 2011-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多