关闭

如何测量程序的运行时间

标签: profiling计时clock优化
1476人阅读 评论(0) 收藏 举报
分类:

本文介绍几种测量时间的方法。相关知识来自学习《Computer System:A Programmer's Perspective 》一书。:--)

本文主要介绍4种方法,其中前2种通过推荐大家阅读相关的个人觉得写得比较好文章来进行了解
1、直接访问硬件来完成精确计时
2、利用操作系统提供的Timer来计时
3、利用C/C++语言提供的函数来计时

4、利用StatisticalSampling(统计抽样)/Profiling来计时,主要讨论VC Profiler(在企业版中提供,绿色版其他版中没有该功能)

1、对于第一种方法。推荐大家阅读这篇文章来了解:http://www.vckbase.com/index.php/Old/index/id/1301 VC中基于Windows的精确定时

2、利用操作系统提供的Timer计时,推荐大家阅读这篇文章 http://hi.baidu.com/scclobfffxbhitq/item/db74d2ac92230211a8cfb7c6 Windows 获取当前系统时间函数总结

对于第二种,博文中只提供了在windows环境下获取,当然在linux环境下也有

通过系统调用一些函数,比如调用times()精确到秒、gettimeofday()精确到微秒、还可以调用SIGRLAM信号和alarm()函数,但是这种方式不精确

3、利用C/C++提供的clock()函数,C/C++中不仅仅是提供了这一个函数来计时。还有很多比如Time(),Localtime()等等一些函数

time.h头文件中有如下定义了cloct_t数据类型 以及CLOCK_PER_SECOND宏定义

#define CLOCK_PER_SECOND((clock_t)1000)

#ifndef _CLOCK_T_DEFINED

typedef long clock_t;

#define _CLOCK_T_DEFINED

#endif

//实例代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
void main(){
clock_t start,finish;
int i=0;
double time;
start=clock();
//执行一个for循环
for(;i<1000;i++)
{
	Sleep(1);
}
finish=clock();
time=(double)((finish-start)/CLOCKS_PER_SEC);
printf("start:%ld\t\tfinish:%ld\tfinish-start:%ld\truntime:%f\n",start,finish,finish-start,time);
}


4、利用VC提供的Profiler工具

1、点击Project——>setting——>Link

勾选Enable Profiliing

确定

如下图所示


2、点击Build——>Profile

勾选Function Profiling

点击确定如下图所示



那么程序运行时间信息就出来了


从其结果看,我们很容易得到程序运行的统计时间

当然Profiler的功能不仅仅就统计一个时间,我们可以通过分析其数据,然后得出程序运行中哪个是瓶颈(耗时最多的函数),根据2/8原理,然后利用相关的优化的方法去优化它。



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:28928次
    • 积分:503
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:8篇
    • 译文:5篇
    • 评论:3条