第三周——效能分析
Posted 6_Asuna
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三周——效能分析相关的知识,希望对你有一定的参考价值。
本周效能分析作业要求:https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/956
HTTPS地址:https://git.coding.net/jyj5951/wf.git
Part one 准备工作
在开始性能分析前,我阅读了《构建之法》29-34页的“2.2性能分析工具”和邹欣老师有关效能分析的博客(博客地址:http://www.cnblogs.com/xinz/archive/2011/11/20/2255809.html),明白了效能分析的两大分析方法,即抽样(Samling)和代码注入(Instrumentation)。为之后对自己的程序进行效能分析有了一定的了解。
Part two 重定向读入文件
以《战争与和平》作为输入文件,重定向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。
CPU参数截图为:
ptime运行结果如下:
经过三次运行程序,发现我的程序运行时间较长,平均运行时间约为10.016s,CPU使用率低于20%。
Part three 瓶颈预测及优化
1、瓶颈预测:
根据代码预测瓶颈应该在排序算法上,冒泡排序虽然是一种稳定的排序算法,但是当处理较多数据时,冒泡算法的速度会慢很多,所以本周我将普通冒泡算法更改为sort()函数。预测优化后预测程序运行速度会少一秒左右。排序算法代码如下:
for (i = 0; i<n; i++) { for (j = 0; j<n - 1; j++) { if (frequency[j].count<frequency[j + 1].count) { temp = frequency[j]; frequency[j] = frequency[j + 1]; frequency[j + 1] = temp; } } }
2、瓶颈显示:
以下是最耗费时间的三个函数,看到瓶颈发现并不是自己预测的排序函数,而是ucrtbased.dll和main函数,以及strcmp()函数。
3、瓶颈优化
通过查看函数的调用情况,发现运行次数最多的大部分是.dll文件和main函数中的输入和strcmp()函数。我将排序算法进行了修改,更改成sort()函数,更改后发现程序运行的时间减少了一秒多,所以快速、有效的排序算法对于优化程序起到一定积极的作用。此外,我将Debug改成了Release形式发现程序运行速度快了很多。
Part four 效能分析总结
在进行文件重定向要求编程的时候,发现程序不能在VS中进行效能分析,所以本周我效能分析的是之前编写的版本。虽然没有对新版本的程序进行效能分析,但是新旧版本的程序的核心代码是相同的,所以对旧版本进行效能优化在很大程度上可以反映出新版本的效能分析结果。
以上是关于第三周——效能分析的主要内容,如果未能解决你的问题,请参考以下文章