精确记算程序的运行时间或者某段代码的运行时间
程序的运行效率很重要,为了明确到底是那一块代码浪费时间,浪费多少时间,检测一下是很有必要的,用下面的方法可以精确地统计时间。第一种精确到秒,第二种精确到毫秒,第三种精确到0.000001秒,大家可以根据自己的需求选用。
#include<time.h>
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
//精确到秒 ==========================================
time_t t1,t2;
time(&t1);
//此处放置要测试的代码
Sleep(1000);//延时
time(&t2);
printf("%d %d %d秒\n",t1,t2,t2-t1);
//精确到毫秒 ========================================
clock_t c1,c2;
c1=clock();
//此处放置要测试的代码
Sleep(100);//延时
c2=clock();
printf("%d %d %d毫秒\n",c1,c2,c2-c1);
//精确到 0.000001毫秒 ===============================
LARGE_INTEGER litmp;
LONGLONG start, end;
double dft, dff, dfm;
QueryPerformanceFrequency(&litmp);//获得时钟频率
dff = (double) litmp.QuadPart;
QueryPerformanceCounter(&litmp);//获得初始值
start = litmp.QuadPart;
//此处放置要测试的代码
Sleep(1000);//延时
QueryPerformanceCounter(&litmp);//获得终止值
end = litmp.QuadPart;
dfm = (double) (end - start);
dft = dfm / dff;//获得对应的时间值,单位秒
printf("%lf毫秒\n",dfm/dff*1000);
}
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
//精确到秒 ==========================================
time_t t1,t2;
time(&t1);
//此处放置要测试的代码
Sleep(1000);//延时
time(&t2);
printf("%d %d %d秒\n",t1,t2,t2-t1);
//精确到毫秒 ========================================
clock_t c1,c2;
c1=clock();
//此处放置要测试的代码
Sleep(100);//延时
c2=clock();
printf("%d %d %d毫秒\n",c1,c2,c2-c1);
//精确到 0.000001毫秒 ===============================
LARGE_INTEGER litmp;
LONGLONG start, end;
double dft, dff, dfm;
QueryPerformanceFrequency(&litmp);//获得时钟频率
dff = (double) litmp.QuadPart;
QueryPerformanceCounter(&litmp);//获得初始值
start = litmp.QuadPart;
//此处放置要测试的代码
Sleep(1000);//延时
QueryPerformanceCounter(&litmp);//获得终止值
end = litmp.QuadPart;
dfm = (double) (end - start);
dft = dfm / dff;//获得对应的时间值,单位秒
printf("%lf毫秒\n",dfm/dff*1000);
}
那是在windows下的,如果在linux环境下,要这样计算时间:
struct timeval tv_start,tv_end;
gettimeofday(&tv_start,NULL);//此处放要测试的代码或程序
gettimeofday(&tv_end,NULL);
printf("程序运行时间为:%lf秒\n",tv_end.tv_sec-tv_start.tv_sec+(tv_end.tv_usec-tv_start.tv_usec)/1000000.0);
其中timeval的结构题定义是这样的:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds 微秒=1/10^6秒 */
};
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds 微秒=1/10^6秒 */
};
tv_sec和tv_usec可以单独输出,根据自己的需求选择精度就可以了
博主ma6174对本博客文章(除转载的)享有版权,未经许可不得用于商业用途。转载请注明出处http://www.cnblogs.com/ma6174/
对文章有啥看法或建议,可以评论或发电子邮件到ma6174@163.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架