博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第三次作业2
阅读量:5362 次
发布时间:2019-06-15

本文共 1075 字,大约阅读时间需要 3 分钟。

要求0

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

Windows系统推荐使用 ptime.exe。下载在此[]。

 

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

要求 给出代码片断,并说明为什么你会认为此处是瓶颈,预计优化会有达到多好的效果。 读取输入并将其拼接成字符串的操作
1             while (getline(cin, temp))2         {3             if (!temp.empty())4             {5                 6                 fInputs += temp;7                 fInputs += ' ';8             }9         }

需要getline读入,并且需要对字符串进行拼接,循环的词数多,同时使用+=进行字符串拼接效率比较低(听同学说的)

 

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

要求 分析为什么此处是瓶颈。

最初使用cpu采样,得到的结果是这样的

然后进行了“检测”

得到了耗时最长的三个函数

然后发现程序的耗时瓶颈主要在两个部分

其中第一个_memmove发现自己并没有写这个函数,点进去后发现是MSVCR110.dll中的函数

其中调用这个函数最多的是erase函数,我使用这个函数来删除字符串中的各种字符与标点

这个字符串操作会不断改变字符串的长度

后面两个都是getline函数的问题

其中主要就是字符串拼接效率比较低

 

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

要求 给出如何改进瓶颈,改进后与改进前程序原理上 (而不是效果上的) 的差异。 针对于字符串拼接,换了不同的方式,例如使用append()代替+=

 

然后发现并没有什么用。从原理上讲好像也没什么区别 然后对于第一个问题,原本的思路是将标点与特殊符号删除,这是整个程序最耗时的一部分,将其改成将其替换成空格,这样减少了字符串操作的词数,速度大幅度提高

 

git地址 https://git.coding.net/Hitagi123/word-count.git

 

 

 

 

转载于:https://www.cnblogs.com/linym762/p/7598761.html

你可能感兴趣的文章
解决:Could not resolve archetype org.apache.maven.archetypes
查看>>
Linux下fsck.ext4:Unable to resolve问题记录
查看>>
一天一记之2012-12-21 页面用模板页的时候,页面上的服务器端按钮注册click事件,点击按钮进不去click方法。...
查看>>
Check-Point-Security-Gateway-BYOL-R77.30-041.161
查看>>
数据结构-用C++实现一个二叉树,递归方法中序遍历
查看>>
预处理、const、static与sizeof-C++中const有什么作用(至少说出3个)
查看>>
Git远程操作详解
查看>>
【week3】四人小组项目—东师论坛
查看>>
leetcode 78. 子集 JAVA
查看>>
多级联动的另类实现 - 纯忽悠贴
查看>>
做菜时你绝对不知道的123个门道
查看>>
受理状态修改为网上申报
查看>>
Spring Cloud服务间调用鉴权
查看>>
centos系统-java -jdk 环境配置
查看>>
JVM调优之服务内存超过阈值报警
查看>>
Android实例-手机安全卫士(三十)-根据指令完成相应操作一(报警音乐和GPS追踪)...
查看>>
消息队列和堆栈
查看>>
结对作业1.1
查看>>
OpenCV学习笔记(8)——图像平滑
查看>>
模型性能提升操作
查看>>