监控每个进程占用的cpu,比如任务管理器的进程tab中的CPU

在代码里,可以通过新建PerformanceCounter来建立监控,其对应的Windows中的自带性能分析工具Perfmon

看下该类的定义中,只要有三个概念:

categoryName:

The name of the performance counter category (performance object) with which

this performance counter is associated.

counterName:

The name of the performance counter.

instanceName:

The name of the performance counter category instance, or an empty string

(""), if the category contains a single instance.

其对应关系如下:

由于instance是变化的,所以每次要根据Process得到instance,那么process跟instance间的关系如何,请看:

PerformanceCounter("Process", "ID Process", instance)这个指标取NextValue()就是ProcessID,就可以跟Process对应起来

但是注意,每个Catagory下面的instance都是不同的,所有Process下的instance到其他Category下就不识别了。

获取instance代码如下:

public static string GetInstanceName(string categoryName, string counterName, Process p){try{PerformanceCounterCategory processcounter = new PerformanceCounterCategory(categoryName);string[] instances = processcounter.GetInstanceNames();foreach (string instance in instances){PerformanceCounter counter = new PerformanceCounter(categoryName, counterName, instance);//Logger.Info("对比in mothod GetInstanceName," + counter.NextValue() + ":" + p.Id);if (counter.NextValue() == p.Id){return instance;}}}catch (Exception ex){}return null;}

获取cpu占用率的PerformanceCounter:

string instance1 = GetInstanceName("Process", "ID Process", p);if (instance1 != null){PerformanceCounter cpucounter = new PerformanceCounter("Process", "% Processor Time", instance1);if (cpucounter != null){cpucounter.NextValue();System.Threading.Thread.Sleep(200); //等200ms(是测出能换取下个样本的最小时间间隔),让后系统获取下一个样本,因为第一个样本无效return cpucounter;}else{Logger.Info("Name:" + name + "生成CPU监控失败" + instance1);}               }else{Logger.Info("Name:" + name + "获取cpu监控实例失败" + instance1);}

获取GC占用率的PerformanceCounter:

GC选取了PerformanceCounter(".NET CLR Memory", "% Time in GC", instance2)这个counter,但注意,这两个属于不同Category,所以instance不能共用

代码如下:

// 获取GC占用率 PerformanceCounter            string instance2 = GetInstanceName(".NET CLR Memory", "Process ID", p);if (instance2 != null){PerformanceCounter gccounter = new PerformanceCounter(".NET CLR Memory", "% Time in GC", instance2);if (gccounter != null){return gccounter;Logger.Info("Name:" + name + "生成GC监控成功" + instance2);}else{Logger.Info("Name:" + name + "生成GC监控失败" + instance2);}}else{Logger.Info("Name:" + name + "获取GC监控实例失败" + instance2);}

转载于:https://blog.51cto.com/4453154/1701525

C#监控-通过PerformanceCounter实现Process的Cpu占用率以及GC占用监控相关推荐

  1. Linux服务器如何查看CPU占用率、内存占用、带宽占用

    CPU占用率查看命令:top 图中红色部分即为占用百分率,下面是每个进程的CPU占用率,如果服务器是多核CPU可能在下方看到有些进程CPU占用超过100%,这种一般是该进程使用了多核. 内存占用率:f ...

  2. 写文件cpu占用率高_CPU占用100%,电脑卡顿原来可以这样解决!多任务操作也运行如飞...

    世界那么大,谢谢你来看我!!关注我你就是个网络.电脑.手机小达人 相信不少朋友都遇到过笔记本卡顿的情况,有时竟连打开文档都很费劲!可查看一番,自己也就打开了几个网页,在解压文件夹的时候打开文档就卡住了 ...

  3. 手机测试软件可以看cpu占用率,手机资源占用情况检测

    手机资源占用情况检测 作为一款从普通PC端使用的PDF打开软件,进化到移动平台上的手机软件,使用到了手机移动系统中,然而手机硬件的配置就目前而言,毕竟还是不敌普通PC的硬件配置.因此在考量软件对手机系 ...

  4. 如何查看CPU信息、CPU占用率和内存占用

    查看CPU占用情况 第一种方法:通过top命令查看CPU的占用情况.如下例图,adb输入"top"后,可以看到: 上图中一些参数的意义: PID : progress identi ...

  5. FreeBSD:从内核获取其他进程的pid及cpu占用率

    最近在做一个项目,需要内核监控一个本机用户进程cpu占用率, 当时考虑有以下几种方法: 1,使用ps命令获取. 方法简单,直接执行命令,再过滤就行.但是从内核调用命令,查了一下,好像Linux可以使用 ...

  6. 银行手机APP软件做性能测试吗,20家农村商业银行个人手机APP评测:CPU占用率差距最大可达32倍 流量消耗成重灾区...

    为持续跟踪和检测手机银行APP的兼容性和易用性等方面的表现,为行业发展提供有益参考,中国电子银行网联合CFCA兼容和性能测试平台对20家农村商业银行客户端进行测试.今年测试范围首次加入IOS系统,与安 ...

  7. ios android cpu占用率,20家农村商业银行个人手机APP评测:CPU占用率差距最大可达32倍,流量消耗成重灾区...

    文|中国电子银行网 陈璐溦 为持续跟踪和检测手机银行APP的兼容性和易用性等方面的表现,为行业发展提供有益参考,中国电子银行网联合CFCA兼容和性能测试平台对20家农村商业银行客户端进行测试.今年测试 ...

  8. 【错误记录】应用运行 CPU 占用率达到 90% ( 使用 CPU Profiler 监控应用运行情况 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 Android 运行时 , 进入某界面后 , 退出界面 , CPU 占用率泄漏 12 % , 某个线程没有退出 , 一直在后台运行 ; 再次进入 ...

  9. linux mysql cpu 查看工具_Shell编程检测监控MySQL的CPU占用率

    shell编程很强大!网站访问量大的时候MySQL的压力就比较大,当mysql的CPU利用率超过300%的时候就不能提供服务了,近乎卡死状态,这时候最好的方法就是重启mysql服务.由于这种事具有不可 ...

最新文章

  1. 福利 | 一文读懂系列文章精选集发布啦!
  2. sourcesafe管理phpproj文件的补充说明(downmoon)
  3. SSH连接两台虚拟机、秘钥免密登录
  4. 面试系列三 如何保证消息不被重复消费
  5. Redis高可用:主从复制及哨兵模式
  6. Spring Aop——给Advice传递参数
  7. SpringBoot 集成 mybatisPlus
  8. c++ abort 函数_C ++中带有示例的abort()函数
  9. caffe新手常遇到的三个问题
  10. MSDN 教程短片 WPF 20(绑定3-ObjectDataProvider)
  11. 腾讯课堂:了解it技术圈的虚拟化容器化之docker
  12. Ghost Blog
  13. Robot Framework怎么导入selenium2library类库
  14. 【活动报名】1024,一起过节,一起品网易/美团/贝壳/PingCAP/爱奇艺云原生实践干货!
  15. VS Code报错:Java 11 or more recent is required to run. Please download and install a recent JDK
  16. iOS获取设备ID总结
  17. Matlab中求程序运行时间三种方法
  18. Android接入第三方QQ登录
  19. PWC-Net: CNNs for Optical Flow Using Pyramid, Warping, and Cost Volume
  20. maven deploy上传文件到私服 神坑解决

热门文章

  1. 【docker详解07】-端口映射
  2. python中可选参数和可变参数_Python函数中的可变长参数详解
  3. SQL Server DateAdd函数
  4. 网页播放flash没有声音和Firefox无法安装插件的问题
  5. 饿了么胃口大开,京东变盟友还是对手?
  6. IP175G交换机原理图
  7. java sql传参_JAVA执行带参数的SQL语句
  8. 基于Python制作的热血足球小游戏
  9. IDEA中配置日志,使用log4j2
  10. 目前流行的装修风格_2019最流行的装修风格,这些都很火!