首页 > 技术文章 > 2017秋软工2 - 效能分析

wangl009 2017-09-26 20:11 原文

coding:https://git.coding.net/137911934/SE20170914.git

要求0 以 战争与和平 作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。

 

要求1 给出你猜测程序的瓶颈。你认为优化会有最佳效果,或者在上周在此处做过优化 (或考虑到优化,因此更差的代码没有写出) 。

本程序都是用 Map 的基本操作进行实现,用 vector 进行功能辅助,最终实现功能,所以据我猜测,瓶颈应该在于大文件的读入。

 

要求2 通过 profile 找出程序的瓶颈。给出程序运行中最花费时间的3个函数(或代码片断)。要求包括截图。

经过测试,在程序运行过程中仅有 main 函数比较耗费时间,其余都是 map 应用库函数操作,对时间消耗不大。所以我推测主要时间耗费在大数据文件的读入处理。

 

要求3 根据瓶颈,"尽力而为"地优化程序性能。

通过 bing 进行查找学习发现,cin 读取数据时有额外开销,运用下面这行代码可以 “取消cin于stdin的同步” :

std::ios::sync_with_stdio(false); 

我将这行代码加入到了我的程序中并重新进行调试。

 

要求4 再次 profile,给出在 要求1 中的最花费时间的3个函数此时的花费。要求包括截图。

通过 ptime 测试时间可以清楚的看到,运行时间减少了 0.7 秒左右,较少率接近 50% ,证明优化有效。

 

要求5 程序运行时间。根据在教师的机器 (Windows8.1) 上运行的速度排名,分为3档。此题得分,第1档20分, 第2档10分,第3档5分。功能测试不能通过的,0分。

推荐阅读