• 作业 20180925-3 效能分析


    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2145

    此作业代码地址:https://git.coding.net/onion102983/cipintongji.git

    对上周作业中的功能4 (仅由文件重定向读入,不由控制台读入) 做效能分析

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

    使用命令行进入程序所在文件夹,输入如下命令:ptime wf -s < war_and_peace.txt

    连续测试三次运行时间截图为:

    消耗时间汇总:

    第一次运行时间 1.358 s
    第二次运行时间 1.391 s
    第三次运行时间 1.337 s
    平均运行时间 1.362 s

    CPU参数: Intel(R) Core(TM) i3-3217U CPU @ 1.80GHz 1.80GHz

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

    猜测的瓶颈:1.由文件重定向读入时遍历文档并把大写字母转化为小写时耗时过长。

                         2.用正则表达式区分单词并统计单词频率时耗时过长。

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

    使用命令行进入程序所在目录后输入以下命令:python -m cProfile -s time wf.py -s < war_and_peace.txt

    得到分析结果截图:

    由测试结果可知程序运行中最花费时间的3个函数及运行时间和次数:

    函数 调用次数 运行时间
    findall() 1 0.297s
    Couter() 1 0.134s
    read() 1 0.086s

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

    把单词频率统计代码封装为一个函数,只有相应功能调用时才会使用。

    优化前代码片段:

    def doCountByPurText(inputText):
        words = re.findall(r'[a-z0-9^-]+', inputText.lower())
        collect = collections.Counter(words)
        num = 0
        for i in collect:
            num += 1
        print('total %d words
    ' % num)
        result = collect.most_common(10)
        for j in result:
            print('%-8s%5d' % (j[0], j[1]))

    优化后代码片段:

    def doCountByPurText(inputText):
        words = re.findall(r'[a-z0-9^-]+', inputText.lower())
        count(words)

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

    修改后再次profie:

     再次测试三次运行时间截图为:

    消耗时间再次汇总:

    第一次运行时间 1.268s
    第二次运行时间 1.275s
    第三次运行时间 1.263s
    平均运行时间 1.268s

    对比可知:平均运行时间由1.362s下降为1.268s

  • 相关阅读:
    jquery
    为什么用bower 安装bootstrap而不用npm来安装?
    Grunt 入门操作指南
    微信页面识别二维码非常不灵敏 而且识别的位置偏移 的解决方案
    osx安装sass
    sass安装和语法
    ES6新特性概述
    link-hover-visited-active
    css HACK
    CSS3文本溢出显示省略号
  • 原文地址:https://www.cnblogs.com/nenusoft/p/9749657.html
Copyright © 2020-2023  润新知