首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >监视进程对每个CPU核心的使用情况

监视进程对每个CPU核心的使用情况
EN

Stack Overflow用户
提问于 2013-09-22 22:45:02
回答 4查看 5.1K关注 0票数 16

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

例如,

名称--- Core1 - Core2 - Core3 - Core4

firefox.exe - 0.5% -- 0.1% -- 0.2% -- 0.3%

我知道有一个叫做"Process Explorer“的程序( Mark Russinovich)可以做到这一点,但是在C#中如何做到这一点呢?我看过System.Diagnostics名称空间,但我找不到任何符合我需求的名称空间。

这是我正在努力实现的一张图片,

EN

回答 4

Stack Overflow用户

发布于 2014-04-08 06:33:52

有一种方法可以获取这些信息,您需要使用内核调试器。我的怀疑是,如果Visual Studio Concurrency Visualizer可以获得这些信息来生成漂亮的报告和可视化效果,那么您也可以从Windows内核中获得这些信息以供使用。

你可以在这里看到一些文档http://msdn.microsoft.com/en-us/library/windows/hardware/ff552961(v=vs.85).aspx

但是更有趣的事情可以通过反转在Visual Studio2012安装目录中找到的Microsoft.ConcurrencyVisualizer.dll来发现。我认为你也可以在你的项目中直接使用这个动态链接库,尽管你不能按照http://msdn.microsoft.com/en-US/vstudio/hh857605#files重新部署它。该动态链接库可在http://www.microsoft.com/en-us/download/details.aspx?id=41646上单独使用。

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

这将是一件既有趣又困难的事情。

票数 2
EN

Stack Overflow用户

发布于 2013-09-25 02:44:57

Stack Overflow用户

发布于 2014-04-01 06:37:06

试试下面的(发现它是here)

代码语言:javascript
复制
    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);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18945029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档