监视.net应用程序的所有核心的CPU使用情况

时间:2015-02-20 19:07:17

标签: c# .net cpu-usage

我想知道是否有人可以帮助获取特定应用程序的cpu使用信息,我能够使用以下code

获取与您在任务管理器中看到的相同的使用信息

任何帮助将不胜感激, 感谢。

2 个答案:

答案 0 :(得分:0)

有两种方法可以做到这一点。

首先是使用WMI

    var searcher = new ManagementObjectSearcher("select * from Win32_PerfFormattedData_PerfOS_Processor");
    var cpuUsages = searcher.Get()
        .Cast<ManagementObject>()
        .Select(x => new
                      {
                          Name = x["Name"],
                          Usage = x["PercentProcessorTime"]
                      }
        )
        .ToList();

    var totalUsage = cpuUsages.Where(x => x.Name.ToString() == "_Total").Select(x => x.Usage).SingleOrDefault();

第二种是使用PerformanceCounter foreach核心。

    int processorCores = new ManagementObjectSearcher("Select * from Win32_Processor").Get().Cast<ManagementBaseObject>().Sum(item => int.Parse(item["NumberOfCores"].ToString()));
    var performanceCounter = new PerformanceCounter[processorCores];
    for (var i = 0; i < processorCores; i++)
    {
        performanceCounter[i] = new PerformanceCounter("Processor", "% Processor Time", i.ToString());
    }

答案 1 :(得分:0)

许多年前,我使用pdh命令获取各种进程信息(在我的情况下,CPU,空闲和电源状态)。我相信它们现在已经成为遗产,并且有一套更新的API。

我发现这些examples使用了来自MSDN网站的性能信息。我还没试过。

一个注意事项:计数器的名称可能具有欺骗性。很多时候,我发现计数器名称从一代窗口略微改变为下一代窗口。作为一个例子,&#34; COUNTERINFOPROCESS&#34;可能成为&#34; COUNTERINFPROCESS&#34;。还有一个用于转储所有计数器名称列表的API。