none
C#准确获取当前程序的cpu占用率 RRS feed

  • 问题

  • 我想到达的目的是,以为我的软件多线程运行了一段时间后会特别占用cpu,我都是从“资源监视器”看到的,所以我有个想法就是,我想在我的软件中设置一个线程专门用来检测本程序的cpu占用率,如果太高,就减少一些线程以降低cpu占用率,我在网上也找到一些代码,大都是用用PerformanceCounter这个类的,我也这样试了,但是我感觉这个算出来的值可能不对,所以在这里来向大神请教,我想特别说明的是,我想获取的值,最好是和图中的值一模一样,或者只有0.1的出入,希望大神不吝赐教,给出代码
    2017年3月5日 12:21

答案

  • Hi 求知与释疑,

    感谢你在MSDN论坛发帖。

    从软件角度来说,这两个都是程序,CPU在执行的时候都是有先后顺序。

    性能监视器中显示数值达到100,资源管理器中没有达到100, 可能每个程序在开发时,设定的上线值是不同的。

    performanceCounter 是微软提供获取性能计数器的,我个人觉得差别不会特别大。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年3月7日 8:00
    版主

全部回复

  • 就是用PerformanceCounter

    http://stackoverflow.com/questions/1277556/c-sharp-calculate-cpu-usage-for-a-specific-application


    http://feiyun0112.cnblogs.com/

    2017年3月6日 4:56
    版主
  • 我以前也有这个需求的,也想用c#处理,其实不用这么麻烦,cmd  typeperf 就可以搞定。调用系统的perfmon。

    比如sql server 占用的cpu如下:

    typeperf "\Process(sqlservr)\% Processor Time"

    就这么简单,参数你可以改,也可以用批处理直接插入数据库。比c#处理方便很多

    2017年3月6日 5:58
  • 我想问一下PerformanceCounter可以做到和资源管理器中的cpu同步吗?因为我使用性能监视器的时候发现,性能监视器中的值可以达到100以上,而我在资源管理器中看到的值都没有超过100.所以我想问的是在性能监视器和资源监视器中的数据有没有考虑到cpu的核数,或者是一个考虑了、另一个没考虑吗?还有就是PerformanceCounter的ReadOnly属性设置为true还是false有影响吗
    2017年3月6日 7:27
  • Hi 求知与释疑,

    感谢你在MSDN论坛发帖。

    从软件角度来说,这两个都是程序,CPU在执行的时候都是有先后顺序。

    性能监视器中显示数值达到100,资源管理器中没有达到100, 可能每个程序在开发时,设定的上线值是不同的。

    performanceCounter 是微软提供获取性能计数器的,我个人觉得差别不会特别大。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年3月7日 8:00
    版主