函数性能测试
实际工作中,对于某个函数的性能到底如何,使用vector、map、pair还是tuple更快呢,往往并没有细致的研究,一般能用即可。但如果是系统核心代码(高频调度,计算量大等),对于容器的选择、接口的实现就很关键,对此我们需要性能测试代码,如下就是一个简答的接口测试代码
代码实现
#include <chrono>
#include <iostream>
#include <thread>
using namespace std::chrono;
using namespace std::chrono_literals;
int main()
{
auto t0 = high_resolution_clock::now();
std::this_thread::sleep_for(10ms+300us); //模拟需要测试性能的代码
auto t1 = high_resolution_clock::now();
std::cout<< duration_cast<milliseconds>(t1-t0).count() << "msec\n";
std::cout<< duration_cast<microseconds>(t1-t0).count() << "usec\n";
return 1;
}
执行情况
kongcb@tcu-pc:~/testcode$ g++ testspeed.cpp -o testspeed
kongcb@tcu-pc:~/testcode$ ./testspeed
10msec
10374usec //-----多次执行,后面的微妙每次都不太一样
实现分析
#include <chrono> 实现微妙级定时功能
duration_cast<milliseconds>(t1-t0),milliseconds为毫秒
duration_cast<microseconds>(t1-t0),microseconds微妙,但实际测试结果不会是10300,因为实际PC的进程调度没有达到微妙级别
当然还有:hours, minutes, seconds, milliseconds, microseconds, nanoseconds
实用说明
后续我们在开发过程中,不确定效率情况下,就可以使用如上的代码测试具体的接口效率到底如何,只有实际的测试数据才能正确反映函数效率。
没有进行时间测量,就不要对代码做有关“效率”的推断。