代码分析
clock()
:返回自程序启动起,处理器时钟所使用的时间。
clock_t start_t = clock();
qDebug() << start_t;
GetTickCount()
:MFC计时器,系统运行时间
long T1 = GetTickCount();//ms
程序段运行时间
clock_t T1,T2;
// 在开始计时位置:
T1 = clock();
// 结束位置:
T2 = clock();
double dtime = (double)(T2-T1)/CLOCKS_PER_SEC);//S
// 开始位置
QDateTime t1 = QDateTime::currentDateTime();
...
// 结束位置
QDateTime t2 = QDateTime::currentDateTime();
int seconds = t2.toTime_t() - t1.toTime_t(); // s
int msecs = t2.toMSecsSinceEpoch() - t1.toMSecsSinceEpoch(); // ms
VS性能分析工具
使用vs自带的【性能探查器】找到瓶颈部分(函数、模块等),逐一改进。
- CPU Usage
- 检测CPU的性能,主要用于发现影响CPU瓶颈(消耗大量CPU资源)的代码。
- GPU Usage
- 检测GPU的性能,常用于图形引擎的应用(如DirectX程序),主要用于判断是CPU还是GPU的瓶颈。
- Memory Usage
- 检测应用程序的内存,发现内存。
- Performance Wizard
- 性能(监测)向导,综合检测程序的性能瓶颈。
性能调优方案
延迟dll加载
方案一:
方案二:
在QT的.pro文件中添加:
win32: QMAKE_LFLAGS_RELEASE += /DELAYLOAD:delay.dll
DELAYLOAD在Qt LNK2001中出现链接错误:无法解析外部符号
window main启动函数分析
mainCRTStartup()
- __scrt_common_main():GS和SEH检查,这俩个检查主要是防止内存溢出。
- invoke_main():初始化环境变量,并调用main函数,进入程序。