工具---程序中的耗时问题
计算时间的函数
在实际开发中,尤其做算法的,有时为了比较不同的算法或者优化算法,需要计算各个算法运行的时间或者关键代码段的运行时间,以此来衡量算法在速度上的优劣或者进行代码优化时的一个参考。因此,如何学会计算程序的运行时间是一个基本的问题。
这里搜罗了部分时间函数,不限于这些:
--------------------python--------------------- #方法1 import datetime starttime = datetime.datetime.now() #long running endtime = datetime.datetime.now() print (endtime - starttime).seconds #方法 2 start = time.time() run_fun() end = time.time() print end-start #方法3 start = time.clock() run_fun() end = time.clock() print end-start #方法1和方法2都包含了其他程序使用CPU的时间,是程序开始到程序结束的运行时间。 #方法3算只计算了程序运行的CPU时间
-----------------------------opencv----------------- //注意添加头文件 #include <cv.h> using namespace std; double t = (double)cvGetTickCount(); //。。。。。。算法或程序代码 t = (double)cvGetTickCount() - t; printf( "processing time = %gms\n", t/(cvGetTickFrequency()*1000) );//输出时间为ms printf( "processing time = %gs\n", t/(cvGetTickFrequency()*1000000) );//输出时间为s ------------------------------------------------------- OpenCV 利用getTickCount()与getTickFrequency()计算执行时间 double t1 = (double)getTickCount(); . . . double t2 = (double)getTickCount(); cout<<"time:"<<(t2-t1)*1000/(getTickFrequency())<<endl; 函数解释: getTickCount()函数:它返回从操作系统启动到当前所经的计时周期数。 getTickFrequency()函数:返回CPU的频率。// getTickFrequency 获取CPU一秒钟走过的时钟周期数 -------------------------------------------------------------- 在OpenCV编程中,可能会遇到比较不同算法之间的运算复杂度及时耗的问题,下面给出一个统计代码运行时间的demo,里面用到getTickCount函数,使用时需要添加头文件#include "opencv2/imgproc/imgproc.hpp"。 #include<iostream> #include <opencv2/opencv.hpp> #include "opencv2/imgproc/imgproc.hpp" using namespace cv; using namespace std; int main(){ double t = (double)getTickCount();//开始时间 for (int i = 0; i <= 1000; i++){}//可替换成其他代码 t = (double)getTickCount() - t;//代码运行时间=结束时间-开始时间 printf("execution time = %gms\n", t*1000. / getTickFrequency());//转换时间单位并输出代码运行时间 system("pause");//让dos界面停留 return 0; } ------------------------------------------------- 使用方法: double t = (double)getTickCount(); // do something ... t = ((double)getTickCount() - t)/getTickFrequency(); 所用函数为getTickCount()和getTickFrequency()。 getTickCount():返回CPU自某个时间(如启动电脑)以来走过的时钟周期数。 getTickFrequency():返回CPU一秒中所走的时钟周期数。所以可以以秒为单位对某运算时间计时。 使用方法: double start = static_cast<double>(getTickCount()); double time = ((double)getTickCount() - start) / getTickFrequency(); cout << "run time: " << time << "s" << endl; 也可用函数cvGetTickCount()和cvGetTickFrequency()。但注意,此时得到的单位是us级的统计时间。 double start = static_cast<double>(cvGetTickCount()); double time = ((double)cvGetTickCount() - start) / cvGetTickFrequency(); cout << "run time: " << time << "s" << endl;
-----------------------------C++--------------------- c/c++ 计算程序运行时间,精确到毫秒 #include <time.h> int main() { clock_t start,end; start=clock(); //To do end=clock(); printf("totile time=%f(ms)\n",(float)(end-start)*1000/CLOCKS_PER_SEC); }
【. . . . . .本博客仅作个人生活、工作、学习等的日常记录。说明: (1) 内容有参考其他博主、网页等,有因“懒”直接粘贴来,会备注出处。若遇雷同,或忘备注,并无故意抄袭之意,请诸“原主”谅解,很感谢您的辛勤"笔记"可供本人参考学习。 (2) 如遇同行,有参考学习者,因个人学识有限,不保证所写内容完全正确。您对本博文有任何的意见或建议,欢迎留言,感谢指正。 (3) 若您认为本主的全博客还不错,可以点击关注,便于互相学习。 (4) 感谢您的阅读,希望对您有一定的帮助。欢迎转载或分享,但请注明出处,谢谢。. . . . . .】
【作者: Carole0904 ; 出处: https://www.cnblogs.com/carle-09/ 】