本周效能分析作业要求: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参数。ptime运行结果如下:
经过三次运行程序,发现我的程序运行时间较长,平均运行时间为8.604s,CPU使用率在20%至40%之间。
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文件,所以我将排序算法进行了修改,更改成sort()函数,更改后发现程序运行的时间减少了一秒多,所以快速、有效的排序算法对于优化程序起到一定积极的作用。
Part four 效能分析总结
在进行文件重定向要求编程的时候,发现程序不能在VS中进行效能分析,所以本周我效能分析的是之前编写的版本。虽然没有对新版本的程序进行效能分析,但是新旧版本的程序的核心代码是相同的,所以对旧版本进行效能优化在很大程度上可以反映出新版本的效能分析结果。