自己做的性能分析"工具", 其实是一小段代码, 嵌入C++工程里用, 能统计出各函数的独占运行时间.
使用方法
1 包含头文件
2 在要分析的函数中添加一个宏(比较烦, 但也只能这样)
3 在退出程序前打印结果
原理
- 每个函数里放一个静态的"分析结果"(FunctionProfile)对象, 用来记录这个函数的分析结果.
- 每个函数里放一个非静态的"栈帧"(ProfilerStackFrame)对象, 并和相应的"分析结果"相关联, 用来统计一次调用的时间.
- 在"栈帧"的构造函数里记录调用的起始时间, 在析构函数里计算出独占时间, 累加到结果里.
- 程序结束前, 把全部"分析结果"按耗时排序, 输出.
线程安全性
支持多线程, 但会把所有线程的运行时间累加到一起, 分不清是那个线程耗时多, 那个耗时少.
运行结果:
profile result:
func_b(): 0.726132 10
func_a(): 0.723048 12
test(): 0.000138 1
ThreadFunc(): 0.000000 1
完整代码 (LINUX版的计时精度可能不够, 请自行换成高精度计时器)
Profiler.h
Profiler.cpp
test.cpp