zoukankan      html  css  js  c++  java
  • 第三周作业(3)——词频统计--效能分析

    git地址:https://git.coding.net/liu-xin/wf.git

    效能分析作业具体要求如下:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2145

    一、预测

    要求:以《战争与和平》作为输入文件,重读向由文件系统读入。

    次数 时间
    第一次 33.972s
    第二次 35.884s
    第三次 34.393s
    平均时间 34.750s

     

     

     

     

     

    通过使用 ptime.exe测试运行时间发现自己的代码运行具体有多慢,我猜测程序的瓶颈是单词从文件中读取。

    FILE *fp;
    fp=fopen(fileinfo.name,"r");

    二、分析

      首先,效能分析的软件我使用的 vs2010 自带的性能分析工具profile,由于之前我一直使用DEV C++编译环境,对于VS不太熟悉,从网上找到操作步骤,按照优化步骤一步一步进行,但是总是会弹出弹窗,说不支持重定向。如图:

    (以下这一段是自己的感慨,比较啰嗦,可以略过)

      我及时上网查找原因,说是2010不支持重定向,我第一想法就是把VS2010卸了,装个别的版本,看在自己下载一次又装一次花费那么久的时间上,我打算再想想其他办法,看看找到适合VS 2010的探查器装上会不会可以运行。事实证明我这个想法多愚蠢,在我还没找到探查器的组件之前,我试着重新运行程序,(划重点!!!)电脑直接黑屏,自动关机重启!!!!!我又一次的感觉到版本控制有多么重要。强忍着把VS2010卸载的冲动(因为在我电脑重装系统之前,我从控制面板中把VS卸载了,从此SQL Sever 和Office都不能启动了),又下载了VS 2012(因为我电脑系统是Win 7,所以不敢安装vs 2017),终于等待下完了,安装好了,已经从天亮等到了天黑。可是,还是会弹出上图中显示的窗口,并且我的电脑又自动重启,然后百度想试着解决这一重启问题,可是在伴随着一次次百度、修改、运行无果并且重启3次之后,我放弃了,我觉得我的电脑不该承受这么多。

      后来,我上网查到了另一个Profile软件——Very Sleepy VS(下载地址http://www.codersnotes.com/sleepy/)这个软件下载非常快,功能较少,但是做功能4的效能分析也够用了。Very Sleepy VS使用步骤:

    1.先打开Very Sleepy VS,接着打开cmd,输入命令行参数(此时重定向的txt应选择比较大一点的,以至于自己可以有时间进行捕获,war_and_peace.txt就可以)

    2.点击Refresh,就会看到第一栏就是自己执行的.exe文件。如图:

    3.程序运行结束之前快速点击两下自己所要捕捉的.exe文件,就会生成效能分析报告。

    第一次分析结果:

    和我预测的完全不一样,程序的瓶颈居然是单词重复计数部分。

    三、优化

    1.修改一:

    自己查找了一下:strcmp(s1,s2) 判断两个字符串s1和s2是否相同,相同返回true ,不同返回false;在自己查找到时候发现另一个函数stricmp,它是可以比较字符串数组的一个方法或函数,但是不可以区分大小写。这也提醒了自己,单词词频重复有误,忽略了函数具体的含义。将strcmp修改为stricmp可以减少区分大小写字母运行的时间。

    if(stricmp(C[i].str,s)==0)

    2.修改二:

    考虑到for循环比较费时间,将sum赋值给了新定义的变量z,这样for循环调用z,不用每次都传sum值。

    int z;
    z=sum;
    for(i=0;i<=z;i++)

    四、再次Profile

    根据自己列出来的代码,修改之后再次进行profile。

     优化结果:count函数总运行时间减少了,%Exclusive下降比较明显,总运行时间缩短了很多。

    次数 时间
    第一次 9.219s
    第二次 9.302s
    第三次 9.271s
    平均时间 9.264s

     

     

     

      

    3次平均时间比未修改之前缩短了25.486s。

    五、总结

      经过这次效能分析,学会了效能分析的流程,知道每一步应该做什么,也知道自己的程序的瓶颈应该去实际分析,找到瓶颈及时解决。对于自己不擅长的,不应该逃避,应该及时努力学习去解决。

     

  • 相关阅读:
    函数及其表示
    集合等离散数学内容
    求和
    分式·新方法
    弹力、重力、摩擦力
    洛谷 P1357 花园
    浮力
    因式分解·新方法
    压强
    洛谷 P2051 [AHOI2009]中国象棋
  • 原文地址:https://www.cnblogs.com/liu-xin1995/p/9718482.html
Copyright © 2011-2022 走看看