探讨性能测试中的计时问题
http://tech.ddvip.com 2007年12月30日 社区交流
内容摘要:本文结合作者在代码性能测试工作中的经验,介绍一组自己封装的的计时函数。使用该组函数可以简化测试工作,从而把更多的精力放在主要工作上,不需要过多地维护计时代码,仅仅使用两个宏就可以方便、精确地实现多个模块、多方式的时间性能测试,并且计时结果以一个文本文件独立保存,清晰直观。
终止计时函数BMTimerEnd()放在计时模块的结束,函数定义如下:void BMTimerEnd(int iModel)
{
LARGE_INTEGER litmp;
QueryPerformanceCounter(&litmp);
gEnds[iModel] = litmp.QuadPart;
gCounters[iModel] += (((gEnds[iModel] - gStarts[iModel]) / dfFreq) * 1000000);
}
参数iModel同BMTimerStart()。本函数首先获取当前的时钟数,然后除以dfFreq得到运行时间。对于最后一条语句:
gCounters[iModel] += (((gEnds[iModel] - gStarts[iModel]) / dfFreq) * 1000000);
要注意两点:
用“+=”而不是“=”,这个看似简单的代替,可以实现对同一个模块的重复计时,后文3.3节列举的情况;
乘以1000000,表示计时单位为微秒(us)。
类似BMTimerStart(),同样为BMTimerEnd()定义一个宏:
#define BM_END(t) BMTimerEnd(t);
2.5. 结果输出WriteData()
以一个文本文件(见图 5和图 8)把全局变量gCounters中的所有值输出,该函数一般在程序结束处调用,如图 4中最后一行代码所示。由于篇幅限制,具体实现代码请参考源程序。
3. 计时测试实例
3.1. 多个模块计时
图 3展示了嵌套计时以及对一个函数中多个模块进行计时的代码,图中可以看到,利用输入参数我们对计时模块进行统一编号,测试代码相对图 1更清晰、直观。

图 3 用我们的函数实现嵌套计时
来源:vckbase 作者:龚 勋 责编:豆豆技术应用
- VC/VC++按钮设计专题
- VC/VC++ 菜单专题
- VC/VC++ 工具条专题
- VC/VC++ 对话框教程
- VC/VC++ 报表教程
- VC/VC++ 控件
- VC/VC++ GDI
- Visual Studio 2008
- VC/VC++ MFC教程
- VC/VC++ QQ
- VC/VC++ Socket编程
- VC/VC++ 钩子编程
- TangramMini组件应用教程
- VC/VC++ 窗体
- VC/VC++ ADO 教程
- Windows CE 教程
- VC/VC++ DLL(动态链接库)编程
- VC/VC++ PDFlib
- VC与MATLAB编程
- VC/VC++ DirectShow 教程
- VC++入门视频教程
- VC/VC++ COM组件设计与应用
- VC/VC++ ATL
- VC/VC++ WTL
- VC/VC++ 定制调试诊断工具和程序
- VC/VC++ 进程
- VC/VC++ Win32
- VC/VC++ WMI
- VC/VC++ 消息
- 更多VC/VC++专题……