【问题标题】:How to get the CPU Usage of each Processor in C#?如何在 C# 中获取每个处理器的 CPU 使用率?
【发布时间】:2012-12-25 06:39:41
【问题描述】:

我想测量每个处理器的 CPU 使用率。

当我运行以下程序时,我得到实例名称 2301_Total。我想我应该得到010,_Total1,_Total

结果是什么意思?如何获取每个处理器的总 cpu 使用率。不是每个核心?

 class PerfMonitor
{
    static void Main()
    {
        var pc = new PerformanceCounter("Processor", "% Processor Time");
        var cat = new PerformanceCounterCategory("Processor");
        var instances = cat.GetInstanceNames();

        foreach (var s in instances)
        { 
            pc.InstanceName = s;
            Console.WriteLine("instance name is {0}", s);
        }
    }
}

【问题讨论】:

  • 我不认为操作系统会按 CPU 来分解——我见过的每个系统监视器都只能选择查看每个内核或查看所有内容的总和。
  • 您有 4 个处理器内核,因此您可以为每个单独的内核以及它们的总和提供计数器。很难猜出“0,_Total”是什么意思。
  • 也许你有一个双核英特尔机器,所以由于超线程,它可能显示 4 个核心和每个核心的使用情况
  • 作为后续,this source 表示多核和多 CPU 之间没有实际区别,因此尝试按 CPU 分组可能无关紧要。
  • @hans-passant。 “0,Total”是我从这个link得到的东西

标签: c# performancecounter system.diagnostics


【解决方案1】:

结果是什么意思?

你的结果是这样的:

instance name is 2
instance name is 3
instance name is 0
instance name is 1
instance name is 6
instance name is 7
instance name is 4
instance name is 5
instance name is _Total

每个实例都是处理器的逻辑 ID(包括超 V 逻辑 ID),除了最后一个是系统上所有处理器的累积实例。

【讨论】:

  • 在我看来你有 8 个核心。
  • @ericyoung 是的,这些是我的,它是 4 个物理核心和 4 个逻辑核心。
【解决方案2】:

由于 Windows 将内核视为处理器,因此这不是一件容易的事。你可以先尝试determine the number of physical CPUs,但这很痛苦。

【讨论】:

    【解决方案3】:

    下载 OpenHardwareMonitor,它是开源的,并且包含一个 dll,您可以使用它来执行此操作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 2010-11-26
      • 2011-03-02
      相关资源
      最近更新 更多