vc中程序运行时间的获取方法

来源:互联网 发布:易语言编程怎么样 编辑:程序博客网 时间:2024/06/18 06:12

        通过使用vc中Windows.h头文件里的GetTickCount()函数,我们可以较为准确的估算出目标程序片段运行所需要的时间(ms)。

        GetTickcount函数原型:DWORD GetTickCount(void);

        这里我们以求解Fibonacci数列的两种算法(递归算法和迭代算法)效率对比为例进行说明:


#include <iostream>#include <Windows.h>using namespace std;long long Fibonacci_Recursive(int n);     //求解Fibonacci数列的递归算法long long Fibonacci_Iterative(int n);     //求解Fibonacci数列的迭代算法int main(){while (1){int n;cout << "请输入n: ";cin >> n;long long t3 = GetTickCount();     //精度到ms级;可以用GetTickCount64()代替,区别详见定义;long long result2 = Fibonacci_Iterative(n);long long t4 = GetTickCount();long long rt2 = t4 - t3;cout << "Fibonacci_Iterative程序结果为: " << result2 << endl;cout << "Fibonacci_Iterative程序运行时间为: " << rt2 << endl;long long t1 = GetTickCount();long long result = Fibonacci_Recursive(n);long long t2 = GetTickCount();long long rt = t2 - t1;cout << "Fibonacci_Recursive程序结果为: " << result << endl;cout << "Fibonacci_Recursive程序运行时间为: " << rt << endl;}return 0;}long long Fibonacci_Recursive(int n){     //求解Fibonacci数列的递归算法if (n == 0)return 0;else if (n == 1)return 1;else return (Fibonacci_Recursive(n - 1) + Fibonacci_Recursive(n - 2));}long long Fibonacci_Iterative(int n){     //求解Fibonacci数列的迭代算法int result[2] = { 0, 1 };if (n < 2)return result[n];long long fibNMinus1 = 1, fibNMinus2 = 0, fibN = 0;int i = 2;while (i <= n){fibN = fibNMinus1 + fibNMinus2;fibNMinus2 = fibNMinus1;fibNMinus1 = fibN;++i;}return fibN;}


       运行后结果如下图所示



      

       可见两者在较小n值(0<=n<=25)时程序运行时间无明显差异,但当n进一步增大时,程序运行时间就有着显著的差异,从而说明用于求解Fibonacci数列的递归算法的效率低下,原因是里面含有多次重复运算。

       需要注意的是GetTickCount()函数并非实时发送,而是由系统约每18ms发送一次,因此其最小精度约为18ms。


       有关于vc中系统时间以及程序运行时间相关方法的具体说明,可以参考此博客:

[喝小酒的网摘]  http://blog.hehehehehe.cn/a/16370.htm

0 0