• 第三次作业2


    要求0

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

    Windows系统推荐使用 ptime.exe。下载在此[https://coding.net/u/younggift/p/word_count_demo/git/blob/master/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


     



  • 相关阅读:
    requirejs小记
    backbone入门
    简单的javascript/css slider滑动条
    又一个简单试用的javascript Slider插件
    Hdu3926 Hand in Hand
    今天OJ升级的学习内容总结
    非常实用的PHP代码片段
    第一次面试经历
    PHP Filesystem 函数
    MFC实现 MSN QQ 窗口抖动
  • 原文地址:https://www.cnblogs.com/linym762/p/7598761.html
Copyright © 2020-2023  润新知