16

有没有办法分别查询或计算每个内核的单个进程的 CPU 使用率?

例如,

名称 - - - - Core1 - Core2 - Core3 - Core4
firefox.exe - 0.5% - - 0.1% - - 0.2% - - 0.3%

我知道一个名为“Process Explorer”的程序(由 Mark Russinovich 编写)可以做到这一点,但我如何在 C# 中做到这一点?我查看了System.Diagnostics命名空间,但找不到任何符合我要求的东西。

这是我想要实现的目标的图片,

http://i.stack.imgur.com/XySpQ.png

4

4 回答 4

2

有一种获取该信息的方法,您需要使用内核调试器。我的怀疑是,如果 Visual Studio 并发可视化工具可以获取此信息以制作精美的报告和可视化,那么您也可以从 Windows 内核中获取它以供您使用。

您可以在此处查看一些文档http://msdn.microsoft.com/en-us/library/windows/hardware/ff552961(v=vs.85).aspx

但是更有趣的东西可以通过反转可以在 Visual Studio 2012 安装目录中找到的 Microsoft.ConcurrencyVisualizer.dll 找到。我认为您也可以在您的项目中直接使用此 DLL,尽管您不能按照http://msdn.microsoft.com/en-US/vstudio/hh857605#files重新部署它。该 DLL 可在此处独立使用http://www.microsoft.com/en-us/download/details.aspx?id=41646

这个想法是了解这个 DLL 如何使用内核跟踪来了解什么线程在什么内核上并复制它以获得准确的统计信息。另外,我认为 ProcessExplorer 确实通过使用内核调试器 API 获得了一些统计信息,因为当我启动 Concurrency Visualizer 工具时,Visual Studio 与它发生冲突。

这将是有趣且难以做到的。

于 2014-04-07T22:33:51.540 回答
0

试试下面的(在这里找到)

    int coreCount = 0;
    foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_Processor").Get())
    {
        coreCount += int.Parse(item["NumberOfCores"].ToString());
    }

    PerformanceCounter[] pc = new PerformanceCounter[coreCount];

    for (int i = 0; i < coreCount; i++)
    {
        pc[i] = new PerformanceCounter("Processor", "% Processor Time", i.ToString());
        Console.WriteLine(pc[i].CounterName);
    }
于 2014-03-31T22:37:06.450 回答
0

这个问题引起了我的注意,我开始研究它。很久以前,我也有类似的要求,但无法找出相同的答案。

最终,我不得不使用备用选项和唯一可用的选项来监控进程处理器使用时间(以 % 为单位)(没有任何类型的理论上的计算工作或相关性修复):Process / % Process Time

我看到了有问题的图表 - “每个 CPU 显示一个图表”(快照),并开始自己调查“进程资源管理器”,以弄清楚它如何设法显示您或我(过去)正在寻找的内容。

对您的问题的回答是 - “不,不可能找出每个进程的每个核心处理器使用情况”,并且您对“进程资源管理器”显示的假设在我在“procexp.chm”中找到的下面引用的语句中进行了解释(可与您下载的 zip 一起使用)主题 > 进程资源管理器 > 系统信息 > 最后一段:

请注意,处理器图的鼠标工具提示显示的是在相关时间在整个系统上消耗最多 CPU 的进程的名称,而不是在特定 CPU 上消耗最多 CPU 的进程的名称

我希望我在这里有意义。

于 2014-04-07T20:13:49.057 回答
0

请参阅:http: //msdn.microsoft.com/pt-br/library/system.diagnostics.performancecounter.aspx 以及如何在 C# 中获取 CPU 使用率?

于 2013-09-24T18:44:56.937 回答