如何准确性测试一个函数的运行时间

 我来答
蘑菇炖汤吧
2019-06-18 · TA获得超过2715个赞
知道答主
回答量:23
采纳率:0%
帮助的人:3427
展开全部

一般的处理都是先调用计时函数,记下当前时间tstart,然后处理一段程序,再调用计时函数,记下处理后的时间tend,再tend和tstart做差,就可以得到程序的执行时间。

主要的几种方法:

1、time()获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数,其值表示从CUT(Coordinated Universal Time)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。

void test1()

{

time_t start,stop;

start = time(NULL);

foo();        //dosomething

stop = time(NULL);

printf("Use Time:%ld\n",(stop-start));}

2、clock()函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)常量CLOCKS_PER_SEC,它用来表示一秒钟会有多少个时钟计时单元。

void test2()

{

double dur;

clock_t start,end;

start = clock();

foo();                        //dosomething  

end = clock();

dur = (double)(end - start);

printf("Use Time:%f\n",(dur/CLOCKS_PER_SEC));

}

3、timeGetTime()函数以毫秒计的系统时间。该时间为从系统开启算起所经过的时间,是windows api。

void test3()

{

DWORD t1,t2;

t1 = timeGetTime();

foo();            //dosomething

t2 = timeGetTime();    

printf("Use Time:%f\n",(t2-t1)*1.0/1000);

}

4、QueryPerformanceCounter()这个函数返回高精确度性能计数器的值,它可以以微妙为单位计时。但是QueryPerformanceCounter()确切的精确计时的最小单位是与系统有关的,所以必须要查询系统以得到QueryPerformanceCounter()返回每秒嘀哒声的个数。

void test4()

{

LARGE_INTEGER t1,t2,tc;

QueryPerformanceFrequency(&tc);

QueryPerformanceCounter(&t1);

foo();    //dosomething

QueryPerformanceCounter(&t2);

printf("Use Time:%f\n",(t2.QuadPart - t1.QuadPart)*1.0/tc.QuadPart);

}

5、GetTickCount返回(retrieve)从操作系统启动到现在所经过(elapsed)的毫秒数,它的返回值是DWORD。

void test5()

{

DWORD t1,t2;

t1 = GetTickCount();

foo();//dosomething

t2 = GetTickCount();

printf("Use Time:%f\n",(t2-t1)*1.0/1000);

}

foo()函数如下:

void foo()

{    long i;    for (i=0;i<100000000;i++)

{        long a= 0;

a = a+1;

}

}

北京新国信
2023-07-11 广告
性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。 功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的... 点击进入详情页
本回答由北京新国信提供
深圳中宇视通科技有限公司
2017-01-05
深圳中宇视通科技有限公司
深圳中宇视通科技有限公司,专业生产液晶拼接屏,监视器,广告机,查询机,触摸一体机,微信打印广告机,户外定制广告机,定制显示端产品,欢迎来公司考察指导,期待跟您的合作!
向TA提问
展开全部
应该是你的程序执行的时间比较短,不足1ms,所以,两次算出来的时间是一样的,你可以试着让它执行久一点……比如下面的程序,你可以试一下: int main() { unsigned long start = GetTickCount(); for(int i= 0;i
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式