嗯,程序员一个永恒的追求就是性能吧?
为了衡量性能,自然需要计时。
奈何无论C标准库还是C++标准库,因为通用性的考虑,其time API精度都不高。基本都是毫秒级的。
所以如果要真正精确地衡量程序的性能,还是得靠系统API。下面的计时方式可以精确到<1us。
如果不想了解什么原理,可以直接拷走下面这个简易计时器类。放在一个头文件里,用的时候Include一下就行。
#include
class MyTimer
{
private:
LARGE_INTEGER _freq;
LARGE_INTEGER _start;
LARGE_INTEGER _stop;
public:
MyTimer()
{
QueryPerformanceFrequency(&_freq);
}
inline void start()
{
QueryPerformanceCounter(&_start);
}
inline void stop()
{
QueryPerformanceCounter(&_stop);
}
inline double elapse()
{
return 1e3*(_stop.QuadPart - _start.QuadPart) / _freq.QuadPart;
}
inline long long ticks()
{
return _stop.QuadPart - _start.QuadPart;
}
};
使用方式也很简单: 三个API:start, stop, elapse.
//Example:
MyTimer timer;
timer.start();
MatrixXd m3 = m1 * m2; //Critical Code Here
timer.stop();
printf("Time Elapsed: %lf\n", timer.elapse());
主要用到的系统API有如下两个。
QueryPerformanceCounter
QueryPerformanceFrequency function
看一下MSDN的说明即可。