C++性能测试用例

最近看了<<重构:改善现有代码...>>里面的JAVA人写了一个测试用例,吹嘘用到了JAVA反射等"高级功能",我也写一些测试代码看看.
首先是代表性能数据的类:

class CapabilityCount 
{
public:
 static void Out();
 char* m_clue;
 CapabilityCount *m_pre;
 DWORD m_frequency;
 DWORD m_times;
static CapabilityCount*head;
 CapabilityCount(char* clue);
 
};
CapabilityCount*CapabilityCount::head=0;

CapabilityCount::CapabilityCount(char*clue)
{
 m_pre=head;
 head=this;
    m_clue=clue;//连成一片,接受一个字符串作输出标识.
}

void CapabilityCount::Out()//输出到文本文件
{
 std::fstream  out;
 CTime time;
 out.open ("d://testcount.txt",std::ios_base::ate|std::ios_base::out);
 ASSERT(out.is_open ());
 time=CTime::GetCurrentTime();
 out<<"is begin write in"<<time.GetDay() <<" : "
  <<time.GetHour ()<<" : "
  <<time.GetMinute ()<<"/n";
 CapabilityCount *psearch=head;

 while(psearch)
 {
 out<<"type:"<<psearch->m_clue<<"all time(milliseconds):"<<psearch->m_times
  <<"      be call frequency :"<<psearch->m_frequency
  <<"      average time(milliseconds):"
  <<psearch->m_times /psearch->m_frequency<<"/n/n";
 psearch=psearch->m_pre ;
 }

}

然后是一个"改动者",负责更新CapabilityCount类

class CapabilityCountHelper 
{
 DWORD m_begintime;
 CapabilityCount &m_supervised;
public:
 CapabilityCountHelper(CapabilityCount& in);
 ~CapabilityCountHelper();

};

CapabilityCountHelper::CapabilityCountHelper(CapabilityCount& in):
m_supervised(in)
{
 m_begintime=GetTickCount();
 ++m_supervised.m_frequency;//被调用的次数
}

CapabilityCountHelper::~CapabilityCountHelper()
{
 DWORD spend=GetTickCount()-m_begintime;
 m_supervised.m_times +=spend;//花掉的总时间
}


知道怎么用吧?
在要测试的函数前加上
 static CapabilityCount   //一定要有static哦
     CapabilityCountInstance("function name or else"); 
     CapabilityCountHelper CapabilityCountHelperInstance(CapabilityCountInstance);


嫌麻烦?
#define KILL_BILL__KILL_BILL__KILL_BILL(clue)   static CapabilityCount   /
     CapabilityCountInstance(clue);   /
      CapabilityCountHelper CapabilityCountHelperInstance(CapabilityCountInstance) /

最近想看<<杀死比尔>>,虽然杀的不是我想的:(

你可以用更精确的时间函数来测试.不过这不关我事;

你也可以在内联函数中或甚至上面的CapabilityCount::Out函数中加入
KILL_BILL__KILL_BILL__KILL_BILL("CapabilityCount::Out");
发生什么事可不关我事:(


C++程序员+csdn果然有搞头!..哇噻,衣服上怎么被浇了屎!!!???

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 3

打赏作者

yjh1982

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值