这两天写代码控制CPU的占用率,显示为一条直线或者曲线,显示为一条直线的时候用到了PerformanceCounter 这个类。

由于对这个类还是很感兴趣的,在网上找了一些资料也不是很清楚。就自己研究了一下。

首先,PerformanceCounter 分为各个category, 每个category 对应不同类型的资源,一般有"Processor", "IPv6",什么的。。。下面有一个所有的类型的列表:

Thread
RAS Total
TCPv6
TCPv4
Paging File
SQLServer:Latches
IPsec AuthIP IPv4
MSDTC Bridge 4.0.0.0
IPsec AuthIP IPv6
.NET CLR Data
WF (System.Workflow) 4.0.0.0
Synchronization
Processor
Security Per-Process Statistics
MSDTC Bridge 3.0.0.0
Generic IKEv1, AuthIP, and IKEv2
Database ==> TableClasses
Event Tracing for Windows Session
ASP.NET v4.0.30319
.NET CLR Networking
Objects
Terminal Services
BITS Net Utilization
SQLServer:User Settable
.NET CLR Exceptions
IPsec IKEv2 IPv6
Process
IPsec IKEv2 IPv4
SQLServer:Broker Activation
WFPv6
SQLServer:Database Mirroring
Search Gatherer
Teredo Relay
IPv4
SQLServer:Cursor Manager Total
IPv6
Job Object Details
WFPv4
IPHTTPS Global
ICMP
Offline Files
SQLServer:Cursor Manager by Type
SQLAgent:JobSteps
PhysicalDisk
Search Indexer
Windows Workflow Foundation
Teredo Server
ServiceModelService 3.0.0.0
Processor Information
SQLServer:Replication Logreader
SQLServer:Transactions
ASP.NET Apps v4.0.30319
SQLServer:Broker TO Statistics
SQLServer:Deprecated Features
Per Processor Network Interface Card Activity
Database
Browser
.NET CLR Remoting
Pacer Pipe
Event Tracing for Windows
.NET CLR LocksAndThreads
Job Object
Client Side Caching
.NET Data Provider for SqlServer
ASP.NET Applications
Terminal Services Session
SQLServer:Broker/DBM Transport
Network Interface
.NET Memory Cache 4.0
SQLServer:General Statistics
SQLServer:Resource Pool Stats
SQLServer:Replication Merge
Security System-Wide Statistics
SQLServer:Backup Device
UDPv6
.NET CLR Security
Outlook
.NET CLR Jit
SQLServer:Workload Group Stats
WFP
ASP.NET State Service
SMSvcHost 4.0.0.0
SQLServer:Databases
SQLServer:Locks
Server Work Queues
ICMPv6
NBT Connection
.NET CLR Loading
Server
SQLAgent:Jobs
RAS Port
Per Processor Network Activity Cycles
SMSvcHost 3.0.0.0
ServiceModelEndpoint 3.0.0.0
.NET CLR Networking 4.0.0.0
ASP.NET
USB
SQLServer:Memory Manager
Cache
SQLServer:Replication Snapshot
System
Redirector
SQLServer:Wait Statistics
SQLAgent:Statistics
LogicalDisk
.NET Data Provider for Oracle
.NET CLR Interop
分布式事务处理协调器
WMI Objects
.NET CLR Memory
SQLServer:Access Methods
SQLServer:Buffer Partition
SQLServer:Buffer Manager
Database ==> Instances
ReadyBoost Cache
SQLServer:Plan Cache
SQLServer:Replication Agents
SQLServer:Exec Statistics
Teredo Client
Telephony
IPsec IKEv1 IPv6
Memory
SQLServer:SQL Errors
SQLServer:Replication Dist.
ServiceModelOperation 3.0.0.0
SQLServer:Buffer Node
IPsec IKEv1 IPv4
Search Gatherer Projects
IPsec Driver
SQLServer:Broker Statistics
SQLServer:SQL Statistics
SQLServer:CLR
SQLAgent:Alerts
UDPv4
SQLServer:Catalog Metadata

然后,每个类型下面对应多个实例,例如通过如下代码获得Processor的实例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;namespace PerformanceCounterTest
{class Program{static void Main(string[] args){PerformanceCounterCategory[] pcc = PerformanceCounterCategory.GetCategories();for (int i = 0; i < pcc.Length; i++){if (pcc[i].CategoryName=="Processor"){Console.WriteLine("-----------------------------------");Console.WriteLine(pcc[i].CategoryName);Console.WriteLine("-----------------------------------");//Console.WriteLine(pcc[i].MachineName);string[] instanceNames = pcc[i].GetInstanceNames();for (int j = 0; j < instanceNames.Length; j++){Console.WriteLine("**** Instance Name **********");Console.WriteLine(instanceNames[j]);//PerformanceCounter[] counters = pcc[i].GetCounters(instanceNames[j]);//Console.WriteLine("**************************************************");//Console.WriteLine("* counter name * ");//for (int k = 0; k < counters.Length; k++)//{//    Console.WriteLine(counters[k].CounterName);//}}}}}}
}

输出结果为:

-----------------------------------
Processor
-----------------------------------
**** Instance Name **********
_Total
**** Instance Name **********
0
**** Instance Name **********
1
请按任意键继续. . .

在每个实例中,又对应多个计数器,这样就需要选择你需要的计数器了。

获得的Processor类别的_Total 实例,看看这个实例都包含什么计数器,上面代码注释的部门包括计数器的输出,结果为:

-----------------------------------
Processor
-----------------------------------
**** Instance Name **********
_Total
**************************************************
* counter name *
% Processor Time
% User Time
% Privileged Time
Interrupts/sec
% DPC Time
% Interrupt Time
DPCs Queued/sec
DPC Rate
% Idle Time
% C1 Time
% C2 Time
% C3 Time
C1 Transitions/sec
C2 Transitions/sec
C3 Transitions/sec
**** Instance Name **********
0
**************************************************
* counter name *
% Processor Time
% User Time
% Privileged Time
Interrupts/sec
% DPC Time
% Interrupt Time
DPCs Queued/sec
DPC Rate
% Idle Time
% C1 Time
% C2 Time
% C3 Time
C1 Transitions/sec
C2 Transitions/sec
C3 Transitions/sec
**** Instance Name **********
1
**************************************************
* counter name *
% Processor Time
% User Time
% Privileged Time
Interrupts/sec
% DPC Time
% Interrupt Time
DPCs Queued/sec
DPC Rate
% Idle Time
% C1 Time
% C2 Time
% C3 Time
C1 Transitions/sec
C2 Transitions/sec
C3 Transitions/sec
请按任意键继续. . .

这样,在使用 PerformanceCounter  的时候需要指定类别,实例名,计数器名。

 PerformanceCounter pc1 = new PerformanceCounter("Processor","% Processor Time","_Total");

然后通过pc1.NextValue() 获得相关计数器的值就可以了。

PerformanceCounter 详解,使用方法相关推荐

  1. [深入浅出Cocoa]之消息(二)-详解动态方法决议(Dynamic Method Resolution)

    [深入浅出Cocoa]之消息(二)-详解动态方法决议(Dynamic Method Resolution) 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循&quo ...

  2. Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例

    Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...

  3. Swoole WebSocket服务使用Task任务详解 (面向对象方法)

    Swoole WebSocket服务使用Task任务详解 (面向对象方法) 作者: 绝爱七八丶 博客: https://blog.csdn.net/qq_40193451 日期: 2018.8.24 ...

  4. smali语言详解之方法的调用

    smali语言详解之方法的调用 一.方法调用关键字介绍 smali语言方法调用关键字主要有以下五种 invoke-virtual主要用于非私有实例方法的调用.实例方法指不是构造方法.父类方法等的属于这 ...

  5. 【数据结构】共享栈详解 判断共享栈满条件栈顶指针变化详解记忆方法例题

    摘要:简单易懂,详细地介绍共享栈概念,指针,判断共享栈栈满条件以及记忆方法等 目录 共享栈概念 栈顶指针&变化详解 栈顶指针种类的记忆方法 判断栈满条件 判断栈满条件的记忆方法 例题 解题思路 ...

  6. Day13-Java方法详解,方法的定义、重载,命令行传参,可变参数与递归

    Java方法详解 什么是方法? Java的方法是语句的集合,他们在一起执行一个功能 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法再程序中被创建,在其他地方被引用 [方法原子性]一个方 ...

  7. 面向对象 详解笔记 方法 类 对象 封装 继承 重写 多态 接口

    文章目录 面向过程&面向对象 面向过程 面向对象 什么是面向对象 回顾方法及加深 方法的定义 修饰符 返回类型 break:跳出switch,结束循环和return的区别 方法名:注意规范就o ...

  8. PerformanceCounter详解,使用方法

    首先,PerformanceCounter 分为各个category, 每个category 对应不同类型的资源,一般有"Processor", "IPv6", ...

  9. 详解java方法与递归

    目录 一 方法(类似于C语言中的函数) 1 方法的基本语法: 2 注意事项 3 方法调用的执行过程 4 方法的重载 重载的规则(满足以下三个特点): 5 方法的意义 二 递归 前提条件: 概念: 递归 ...

最新文章

  1. jquery-12 折叠面板如何实现(两种方法)
  2. 做了这么多年的研发,其实你一点也不懂购物车的设计思路!
  3. Facebook打算与Google的人工智能一较高下吗?
  4. serverlet 区别_Servlet中/和/*的区别
  5. vegas pro 17中文版
  6. Java数据结构和算法:哈夫曼树
  7. SpringBoot 集成 clickhouse + mybatis-plus 配置及使用问题说明(含建表语句、demo源码、测试说明)
  8. pmp每日三题(2022年2月17日)
  9. 正则表达式 正整数_史上最全的正则表达式 (1) -- 校验数字的表达式
  10. 杭电1434 幸福列车
  11. skip-gram模型介绍及代码
  12. 给Jquery easyui 的datagrid 每行添加操作链接
  13. 两篇一区SCI可认定A类博士!享​200平住房+40万科启!硕士也入编!
  14. 数据挖掘-Apriori算法
  15. 网络地址转换--PAT配置
  16. 操作系统每日一题 2020 July
  17. 台式计算机小键盘,台式电脑软键盘在哪里,初学电脑
  18. Excel在统计分析中的应用—第十二章—回归分析与预测-应用LINEST函数进行回归分析
  19. 第四十二篇:Flink面试方案设计篇
  20. SpringSecurity如何处理logout注销操作

热门文章

  1. android游戏怎么玩,怎么用手机玩电脑游戏-电脑上安装Android 10小白教程,大屏Android用起来...
  2. 【BZOJ2149】拆迁队(斜率优化DP+CDQ分治)
  3. 搜索引擎就是百度、雅虎吗?
  4. python list常用方法
  5. Linux系统优化命令mpstat
  6. prefetch 和preload_在webpack中使用prefetch/preload
  7. python爬取站_python爬取某站磁力链
  8. JS合并两个数组的方法介绍
  9. Android的EditText超出字数限制,给用户提示
  10. 21秋福师《计算机网络与通讯》在线作业一[答案]