一个高效的C++性能计数器模板

原创 2004年09月26日 15:35:00

一个高效的C++性能计数器模板

email: larrin2002@msn.com

homepage: www.larrin.net

摘要:对性能期望较高的系统中,简单高效的性能计数器对发现系统中的性能瓶颈很有价值。本文给出一个使用简单但高效的C++性能计数器模板。本文给出的计数器是Windows版本的,但移植到Linux下非常简单。

计数器代码如下:

//PerformanceCounter.h

#ifndef _LARRINSDK_PERFORMANCE_COUNTER_H_
#define _LARRINSDK_PERFORMANCE_COUNTER_H_

#include "LarrinSdk.h"
#include <iostream>
#include <windows.h>

using namespace std;

BEGIN_LARRIN_SDK

template<class T>
class CPerformanceCounter
{
 const char  *m_Name ;
 unsigned long m_tmpCounter ;
 unsigned long m_TickCounter;

 CPerformanceCounter(const char *name):m_Name(name),m_TickCounter(0)
 {
 }

public:

 ~CPerformanceCounter()
 {
  cout << "PerformanceCounter " << m_Name << " : " << m_TickCounter << endl ;
 }

 static CPerformanceCounter & getInstance(const char *name)
 {
  static CPerformanceCounter instance(name);
  return instance ;
 }

 void BeginCounter()
 {
  m_tmpCounter = GetTickCount();
 }

 void EndCounter()
 {
  m_TickCounter += (GetTickCount() - m_tmpCounter) ;
 }
};

template <class T>
class CPerformanceCounterHelper
{
 const char *m_name ;
public:
 CPerformanceCounterHelper(const char *counter_name):m_name(counter_name)
 {
  CPerformanceCounter<T>::getInstance(m_name).BeginCounter();
 }

 ~CPerformanceCounterHelper()
 {
  CPerformanceCounter<T>::getInstance(m_name).EndCounter();
 }
};

#define DEFINE_COUNTER(x) struct x;

#ifdef ENABLE_PERFORMANCE_COUNTER
#define BEGIN_COUNTER(counter_name) CPerformanceCounter<counter_name>::getInstance(#counter_name).BeginCounter();
#define END_COUNTER(counter_name) CPerformanceCounter<counter_name>::getInstance(#counter_name).EndCounter();
#define COUNTER_HELPER(counter_name) CPerformanceCounterHelper<counter_name> counter_##counter_name(#counter_name);
#else
#define BEGIN_COUNTER(counter_name)
#define END_COUNTER(counter_name)
#endif

END_LARRIN_SDK

#endif //_LARRINSDK_PERFORMANCE_COUNTER_H_

 

测试程序:

1.main.cpp

#include "PerformanceCounter.h"

extern void test1();

using namespace LarrinSdk;

DEFINE_COUNTER(counter_1)

void main()
{
 {
  COUNTER_HELPER(counter_1)
  for(int i = 0 ; i < 300 ; i++)
  {
   Sleep(1);
  }
 }

 test1();
}

//2.test1.cpp

#include "PerformanceCounter.h"

using namespace LarrinSdk;

DEFINE_COUNTER(counter_1)

void test1()
{
 BEGIN_COUNTER(counter_1)
 for(int i = 0 ; i < 1000 ; i++)
 {
  Sleep(1);
 }
 END_COUNTER(counter_1)
}

C++模板来实现一个通用的内存池.

从最简单的入手1.实现一个固定大小的allocator//分配固定大小内存块的模板类,内部缓存算法自己实现了,//我用的是预分配+回收cache链//即分配时先检查回收链有无数据,无的话每次分配n*s...
  • Kevin_qing
  • Kevin_qing
  • 2006年02月25日 00:11
  • 2886

如何写出高效C++(模板与泛型编程)

对Effective C++读了以后的总结(暑假没事干。。就是看书,从后往前的总结) 41。了解隐式接口和编译器多态 隐式接口:由一组有效表达式构成,表达式要求了相应的约束条件。 显式接口:则是在...
  • hello_bravo_
  • hello_bravo_
  • 2016年08月08日 17:14
  • 415

使用PDH性能计数器获取CPU使用率网卡信息等

使用pdh包含头文件Pdh.h 库可以用#pragma comment(lib,"Pdh.lib")加载 通常步骤为打开查询,添加查询,查询的收集,取值。下面的是cpu使用率 HQUE...
  • zhizhuode
  • zhizhuode
  • 2015年10月17日 15:18
  • 799

Windows性能计数器

一、性能计数器概述  性能监视,是Windows NT提供的一种系统功能。Windows NT一直以来总是集成了性能监视工具,它提供有关操作系统当前运行状况的信息,针对各种对象提供了数百个性能计数器。...
  • liuben
  • liuben
  • 2009年03月30日 21:03
  • 16752

使用性能计数器收集性能数据

使用性能计数器收集性能数据 本文值得阅读吗?  本文讨论我们如何使用性能计数器从应用程序收集数据。我们将先了解的基本知识,然后我们将看到一个简单的示例,我们将从中收集一些性能数...
  • FCzhandu0
  • FCzhandu0
  • 2016年04月21日 20:23
  • 845

栈的c++模板实现

在我们软件开发中,经常要用到栈这个重要的数据结构,栈是一种先进后出的线性结构,以前见过很多人在网上写的例子,都是基于基本数据类型的,而在我们的实际开发中,大部分都是基于特定的类型,我们不可能为每一种数...
  • zhouxuguang236
  • zhouxuguang236
  • 2012年09月21日 14:23
  • 2560

windows系统性能计数器函数

系统性能计数器[Z] FROM:http://hi.baidu.com/wlzqi/blog/item/d9782e73f4b4ba1c8701b092.html 上面的地址是专家的地址,有什...
  • ghevinn
  • ghevinn
  • 2012年09月26日 15:35
  • 1872

windows 系统中三个关键性能计数器

对着任务栏右击 ---打开资源管理器---打开性能一栏 ------底下----打开 资源管理器     ★“Pages/sec”(内存分页/秒):主要用来表示平均每秒从虚拟内存中进行读取和写入...
  • tianlianchao1982
  • tianlianchao1982
  • 2012年04月24日 09:47
  • 828

IIS指标---Web测试重要计数器

/Internet Information Services Global/File Cache Hits %     文件缓存中的成功查找总数。 /Process(inetinfo)/Private...
  • youer511
  • youer511
  • 2010年08月06日 14:50
  • 3464

Windows性能计数器解释

性能对象 计数器 描述 Processor使用 %Processor Time(所有实例)  指处理器执行非闲置线程时间的百分比。这个计数器设计成用来作为处理器活动的主要指示器。它通过在...
  • lykangjia
  • lykangjia
  • 2017年02月10日 10:32
  • 555
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一个高效的C++性能计数器模板
举报原因:
原因补充:

(最多只允许输入30个字)