Windows下使用PDH获取性能计数器(CPU、内存、网络流量等)

本文详细介绍如何使用Windows性能计数器(Performance Counters)监控系统资源,包括CPU利用率、内存大小及网卡数据流量。文章通过示例代码展示如何通过Pdh库获取这些关键性能指标。

性能计数器

获取计数

网卡接口

 

Perfmon(运行命令perfmon.msc或perfmon即可打开)性能监视器主要用来对指定的系统性能指标进行实时监控。Windows提供Pdh(performance data helper)库,方便通过程序获取里面的性能计数信息。

性能计数器

Windows通过计数器(Counter)提供操作系统、程序、服务以及驱动等的信息,以便对系统进行监视或查找性能瓶颈。

Windows提供了多种方式获取性能计数,下图展示了消费者(获取计数器的程序)、注册表、PDH等之间的互相关联关系:

Pdh接口说明

要使用性能计数器,需要引用对应的库:

#include <Pdh.h>
#include <PdhMsg.h>
#pragma comment(lib,"pdh.lib") 

获取计数器一般需要以下步骤:

  • PdhOpenQuery:打开Pdh;

  • PdhAddCounter:添加要关注的计数器(可以添加多个);

  • PdhCollectQueryData:收集计数;因很多计数需要区间值,所以需要调用两次Query(间隔至少1s),然后再获取计数值。

  • PdhGetFormattedCounterValue:获取计数值;

计数器路径

每个计数器由其名称与路径(可在性能监视器中查看到)唯一标识:
\\Computer\PerfObject(ParentInstance/ObjectInstance#InstanceIndex)\Counter

其中:

  • Computer:为要监视机器名或IP地址,对本机可忽略;

  • PerfObject:为要监视的性能对象名称,可以是CPU、内存、硬盘、程序等等(如Processor Information表示CPU,Network Interface表示网卡);

  • ParentInstance,ObjectInstance,InstanceIndex:在要监视的对象有多个实例时,用于区分;注意,因#在此被用于表示实例索引,所以ParentInstance等中若有#则需要替换为_;

获取计数

通过调用Pdh接口,即可获取对应计数信息。

计数器

要获取性能计数,需要得知对应的计数器路径;常见计数器路径都比较好获取,网卡需要获取当期使用网卡的接口描述。

以下示例获取CPU利用率、可用内存大小,以及网卡的收发数据量。

void getResourceCounter()
{
    HQUERY query;
    PDH_STATUS status = PdhOpenQuery(NULL, NULL, &query);
    if (status != ERROR_SUCCESS)
  &n
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值