[C/C++]C/C++计算代码的运行时间
有很多时候,实现一个功能后可能不仅仅要效果,还要效率,如果可以在极短的时间内完成一个功能那当然是最好不过的啦,但是可能经常会事与愿违。
这里就写一下,都可以怎样用C/C++或者Qt的方法来测试代码的运行时间。
一、C/C++方法
1.1 clock_t方法
clock_t方法需要包含头文件<time.h>,clock_t是一个长整型数字,它可以将时间精确到毫秒级别:
#include <time.h>
clock_t start, finish;
start = clock();
...
function();
...
finish = clock();
int duration = finish - start;
double durationS = (double)duration / CLOCKS_PER_SEC;//如果需要换算成秒
1.2 使用windows API 1
头文件#include<Windows.h>,主要函数GetTickCount(),能达到毫秒级别:
#include <Windows.h>
DWORD start_time = GetTickCount();
...
function();
...
DWORD end_time = GetTickCount();
DWORD duration = start_time - end_time;
1.3 使用Windows API 2
头文件依然是#include<Windows.h>,但是这次不一样,可以达到微秒级别:
#include <windows.h>
double run_time;
_LARGE_INTEGER time_start; //开始时间
_LARGE_INTEGER time_over; //结束时间
double dqFreq; //计时器频率
LARGE_INTEGER f; //计时器频率
QueryPerformanceFrequency(&f);
dqFreq=(double)f.QuadPart;
QueryPerformanceCounter(&time_start); //计时开始
...
function();
...
QueryPerformanceCounter(&time_over); //计时结束
//乘以1000000把单位由秒化为微秒,精度为1000 000/(cpu主频)微秒
run_time=1000000*(time_over.QuadPart-time_start.QuadPart)/dqFreq;
也可以这么用的:
LARGE_INTEGER nFreq; LARGE_INTEGER t1;
LARGE_INTEGER t2;
QueryPerformanceFrequency(&nFreq);
QueryPerformanceCounter(&t1);
double dtStart = t1.QuadPart;
...
function();
...
QueryPerformanceCounter(&t2);
double dtEnd = t2.QuadPart; //后面的1000表示毫秒整数,微秒小数
double elapsed = (dtEnd - dtStart) / (double)nFreq.QuadPart * 1000;
二、Qt方法
Qt方法的话主要还是用到QTime类,Qt的方法基本上都只能精确到毫秒级别。
QTime startTime = QTime::currentTime();
...
function();
...
QTime stopTime = QTime::currentTime();
int elapsed = startTime.msecsTo(stopTime);
要注意这个方法的是,如果你的代码块运行时间超级短,或者说是达到几个毫秒的级别的话,这个方法慎用,有毒,有时候直接就是0。
另一个也是Qt的QTime的方法,也是毫秒级别的,也是慎用:
QTime time;
time.start();
...
function();
...
int timeElapsed = time.elapsed();
三、结论
我个人的话,会相对比较推荐用clock_t的方法吧,这个好像是C/C++的东西,不算windows API的吧,一般来说冲突会相对比较少吧,如果对时间要求达到毫秒级别就满足的话,那如果是要达到微秒级别,那就没办法,暂时能找到的也就是1.3方法提到的window API 2的方法,但是这个因为直接用windows API,我竟然在某些场合下出现冲突的情况!!!
泪眼问花花不语,乱红飞过秋千去。
[C/C++]C/C++计算代码的运行时间的更多相关文章
- C语言--计算代码段运行时间
c语言中有专一包含计算时间函数的头文件,time.h.当我们需要计算某段程序运行的时间时就需要用到time.h包含的clock()函数,在这里介绍一下如何使用这个函数计算代码运行时间. clock函数 ...
- Objective-C 计算代码运行时间
今天看到一篇关于iOS应用性能优化的文章,其中提到计算代码的运行时间,觉得非常有用,值得收藏.不过在模拟器和真机上是有差异的,以此方法观察程序运行状态,提高效率. 第一种:(最简单的NSDate) N ...
- 使用console进行 性能测试 和 计算代码运行时间(转载)
本文转载自: 使用console进行 性能测试 和 计算代码运行时间
- 使用console进行 性能测试 和 计算代码运行时间
原文:http://www.tuicool.com/articles/JrARVjv 对于前端开发人员,在开发过程中经常需要监控某些表达式或变量的值,如果使用用 debugger 会显得过于笨重,最常 ...
- 使用console进行性能测试和计算代码运行时间
对于前端开发人员,在开发过程中经常需要监控某些表达式或变量的值,如果使用用debugger会显得过于笨重,最常用的方法是会将值输出到控制台上方便调试.最常用的语句就是console.log(expre ...
- 三种计算c#程序运行时间的方法
三种计算c#程序运行时间的方法 第一种: 利用 System.DateTime.Now // example1: System.DateTime.Now method DateTime dt1 = S ...
- C:clock() 计算代码执行时间
clock():捕捉从程序开始运行到clock()被调用时所耗费的事件. 这个时间的单位是 clock tick,即时钟打点 常数 CLK_TCK:机器时钟每秒走的时钟打点数 要使用这个函数需要包含头 ...
- iOS测试一段代码的运行时间
王刚韧 23:19:26测试一段代码的运行时间 测试一段代码运行花了多久: NSDate* tmpStartData = [NSDate date] ;<#代码#> double delt ...
- python基础:测量python代码的运行时间
Python社区有句俗语:“python自己带着电池” ,别自己写计时框架.Python 2.3 具备一个叫做 timeit 的完美计时工具可以测量python代码的运行时间. timeit模块 ti ...
随机推荐
- POJ - 3264 Balanced Lineup(线段树或RMQ)
题意:求区间最大值-最小值. 分析: 1.线段树 #include<cstdio> #include<cstring> #include<cstdlib> #inc ...
- DP(动态规划求含有冻结期的买卖股票)-05-动态规划-买卖股票
题目描述 Alice这次决定去股市里当一波韭菜. 她希望你设计一个算法,在满足以下3个约束条件下,计算出最大利润. 1. 你可以多次买卖一支股票,但是对于每支股票,你不能同时参与多笔交易(你必须在再 ...
- 干货分享:深度解析Supplement Essay写作
今天Hotessay小编给同学们介绍下附加文书的创作思路.因为附加文书基本上都是短essay,所以简洁才是硬道理! 通常,我们可以把美国大学的附加文书分为以下几类: 1.Tell us about y ...
- HTMLCSS学习
子选择器:第一代 .food>li{border:1px solid red;} 后代选择器:所有后代 .first span{color:red;} 通用选择器: ...
- CodeForces - 710E Generate a String (dp)
题意:构造一个由a组成的串,如果插入或删除一个a,花费时间x,如果使当前串长度加倍,花费时间y,问要构造一个长度为n的串,最少花费多长时间. 分析:dp[i]---构造长度为i的串需要花费的最短时间. ...
- UVA - 1611 Crane(起重机)(贪心)
题意:输入一个1~n(1<=n<=10000)的排列,用不超过9^6次操作把它变成升序.每次操作都可以选一个长度为偶数的连续区间,交换前一半和后一半. 提示:2n次操作就足够了. 分析:从 ...
- 关于数据库text字段
问题描述: maven项目中,使用MBG代码生成器自动生成的实体类对象时,当数据库中表的字段有 text 类型时,对应到java类中是String类型的,在前端页面通过ajax获取到 json 格式的 ...
- 从零开始Windows环境下安装python+tensorflow
从零开始Windows环境下安装python+tensorflow 2017年07月12日 02:30:47 qq_16257817 阅读数:29173 标签: windowspython机器学习te ...
- jquery获取高度
分为以下几种: .height() -获取匹配元素集合中的第一个元素的当前计算高度值 或 设置每一个匹配元素的高度值. -.css('height') 和 .height()之间的区别是后者返回一个没 ...
- java百货中心供应链管理系统 源码
开发环境: Windows操作系统开发工具:MyEclipse/Eclipse + JDK+ Tomcat + MySQL 数据库 百货中心供应链管理系统主要用于实现了企业管理数据统计等.本系统结构如 ...