还有,在不同的时间,测试同样的数据发现所用的时间也不一样?
系统的环境比较复杂,有几方面的原因,
首先系统可能当时在后台运行程序,占用了资源,使得你的程序执行收到影响
另外一个比较重要的是Windows(从好像从winnt开始)有一种缓存机制,当第一次运行某个程序时,运行程序的数据要加载到内存中,但退出这个程序后,加载到内存中的某些数据并不会消失,而是会作为系统缓存继续存在。因此当你第二次运行时会感受到程序的载入速度比第一次会快一些,这就是第二次运行的时间比第一次的少的原因
如果你需要精确的时间统计,其实应该获取程序占用的cpu时间,或者你进行测试的时候系统最好是刚启动比较稳定的,而且没有运行什么后台程序等
嗯,随便写了个,可以获取当前进程占用cpu时间,你可以把其中的获取时间写成函数,还可以在要统计的一段程序前后获取时间然后算差值就可以知道一段程序的cpu占用时间,不过这种方法有个缺陷就是只能精确到毫秒
[CODE]#include<windows.h>
#include <iostream>
using namespace std;
void main()
{
int i, j;
HANDLE hProcess;
FILETIME ft1, ft2, ftKernel, ftUser;
SYSTEMTIME stKernel, stUser;
ULONG ulTime;
DWORD dwProcID = GetCurrentProcessId();
hProcess = OpenProcess( PROCESS_ALL_ACCESS, FALSE, dwProcID );
for (i = 0; i < 100000; i ++)
{
for (j = 0; j < 10000; j ++)
{
int x = 9;
}
}
Sleep(8000); //这里写个sleep是想告诉你这种统计方法是不会将Sleep这种基本不耗cpu的时间损耗计算在内,最后结果根据个人的计算机来定,应该不会超过8秒
GetProcessTimes(hProcess, &ft1, &ft2, &ftKernel, &ftUser);
FileTimeToSystemTime(&ftKernel, &stKernel);
FileTimeToSystemTime(&ftUser, &stUser);
ulTime = stKernel.wSecond * 1000 + stKernel.wMilliseconds + stUser.wSecond * 1000 + stUser.wMilliseconds;
cout<<ulTime<<endl;
system("pause");
}[/CODE]