当前位置:首页 > 行业动态 > 正文

performance insert

“Inserting data into a database for tracking performance.”

PerformanceCounter 详解,使用方法

在 Windows 操作系统中,性能计数器(Performance Counter)是一种用于收集和跟踪系统性能数据的方法,它可以帮助我们了解系统的运行状况,以便进行优化和调整,本文将详细介绍 PerformanceCounter 的相关知识,并提供一些使用示例。

什么是 PerformanceCounter?

PerformanceCounter 是 Windows 操作系统中的一个类,它提供了一种方便的方法来获取各种性能指标,如处理器使用率、内存使用情况、磁盘 I/O、网络带宽等,通过创建 PerformanceCounter 对象并设置相应的性能计数器名称,我们可以轻松地获取这些指标的数据。

如何创建 PerformanceCounter 对象?

要创建 PerformanceCounter 对象,我们需要使用 perfmon.dll 动态链接库中的 CreatePerformanceCounter 函数,以下是一个简单的示例:

include <iostream>
include <windows.h>
include <pdh.h>
include <pdhmsg.h>
include <tchar.h>
int main()
{
    HRESULT hr;
    PDH_STATUS status;
    DWORD performance_counter_id;
    hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
    if (FAILED(hr))
    {
        std::cout << "CoInitializeEx failed: " << GetLastError() << std::endl;
        return 1;
    }
    hr = PdhOpenQuery(NULL, NULL, &m_hQuery);
    if (FAILED(hr))
    {
        std::cout << "PdhOpenQuery failed: " << GetLastError() << std::endl;
        CoUninitialize();
        return 1;
    }
    hr = PdhAddCounter(m_hQuery, _T("\Processor(_Total)\% Processor Time"), NULL, &performance_counter_id);
    if (FAILED(hr))
    {
        std::cout << "PdhAddCounter failed: " << GetLastError() << std::endl;
        PdhCloseQuery(m_hQuery);
        CoUninitialize();
        return 1;
    }
    hr = PdhCollectQueryData(m_hQuery);
    if (FAILED(hr))
    {
        std::cout << "PdhCollectQueryData failed: " << GetLastError() << std::endl;
        PdhRemoveCounter(m_hQuery, performance_counter_id);
        PdhCloseQuery(m_hQuery);
        CoUninitialize();
        return 1;
    }
    PDH_FMT_COUNTERVALUE counter_value;
    hr = PdhGetFormattedCounterValue(performance_counter_id, PDH_FMT_DOUBLE, NULL, &counter_value);
    if (SUCCEEDED(hr))
    {
        std::cout << "CPU usage: " << counter_value.doubleValue << "%" << std::endl;
    }
    else
    {
        std::cout << "PdhGetFormattedCounterValue failed: " << GetLastError() << std::endl;
    }
    hr = PdhCollectQueryData(m_hQuery);
    if (FAILED(hr))
    {
        std::cout << "PdhCollectQueryData failed: " << GetLastError() << std::endl;
        PdhRemoveCounter(m_hQuery, performance_counter_id);
        PdhCloseQuery(m_hQuery);
        CoUninitialize();
        return 1;
    } 

如何使用 PerformanceCounter?

创建了 PerformanceCounter 对象后,我们可以使用其成员函数来获取性能指标数据,以下是一些常用的函数:

1、PdhAddCounter:添加性能计数器,需要提供计数器名称和实例名称,如果计数器已存在,返回错误代码,否则,返回成功代码。

2、PdhRemoveCounter:移除性能计数器,需要提供计数器句柄,如果成功移除计数器,返回成功代码,否则,返回错误代码。

0