WEB开发网
开发学院软件开发VC 探讨性能测试中的计时问题 阅读

探讨性能测试中的计时问题

 2010-08-15 20:47:50 来源:WEB开发网   
核心提示:2.3. 开始计时 BMTimerStart()开始计时函数BMTimerStart()放在计时模块的开始,函数 定义如下:void BMTimerStart(int iModel){ LARGE_INTEGER litmp; QueryPerformanceCounter (&litmp); gStarts[iMo

2.3. 开始计时 BMTimerStart()

开始计时函数BMTimerStart()放在计时模块的开始,函数 定义如下:

void BMTimerStart(int iModel)
{
      LARGE_INTEGER litmp;
     QueryPerformanceCounter (&litmp);
     gStarts[iModel] = litmp.QuadPart;
}
其中参数iModel表示当前计时的模块序号, 0<=iModel<=BENCHMARK_MAX_COUNT;为了简化调用代码,我们给出一个宏定 义如下:#define BM_START(t)         BMTimerStart (t);2.4. 终止计时BMTimerEnd()

终止计时函数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中最后一行代码所示。由于篇幅限制,具体实现代码请参考源程序。

上一页  1 2 3 4 5  下一页

Tags:探讨 性能

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接