zoukankan      html  css  js  c++  java
  • 20190919-3 效能分析

    作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/7628

    代码git地址  https://e.coding.net/thiking/ci_pin.git

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

    运行命令:

    ptime wf -s < war_and_peace.txt

    运行时间截图:

     

    消耗时间汇总:

     

     CPU参数为:Intel(R)Core(TM)i5-4200M CPU @2.50GHZ 2.49GHZ

    要求1 给出你猜测程序的瓶颈。

     瓶颈1:处理整个文本内容时遍历整个文档耗时较长

    def process_buffer(bvffer):
        total = 0
        if bvffer:
            word_freq = {}
            bvffer = bvffer.lower()                       # 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq
            for ch in '“‘!;,.?”:""':                         #清除文档中的标点
                bvffer = bvffer.lower().replace(ch, " ")  #将所有字母转换成小写,并将所有标点转化为空格,便于统计,
            words = bvffer.strip().split()                #strip消除空白符,split以空格作为单词分界
            total = total + len(words)
            print("total: "+str(total)+" words")
            print('
    ')
            for word in words:
                word_freq[word] = word_freq.get(word, 0)+1   #读取到的单词存放到字典
            Output(word_freq)                               

    瓶颈2:功能四函数过于冗杂

    def counoutputText(inputText):          # 功能4 文本读入结果重定向至另外文件
        filepath = "D://"
        filename = "output.txt"
        fullname = filepath + filename
        standard_output = sys.stdout  # 备份默认的标准输出(输出值控制台)
        sys.stdout = open(fullname, "w+")  # 将标准输出重定向至文件
        process_buffer(inputText)  # 读入文本中
        sys.stdout.close()  # 关闭文件
        sys.stdout = standard_output  # 恢复默认标准输出

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

     使用命令行:python -m cProfile -s time wf.py -s < war_and_peace.txt

     运行截图:

      

      其中:

        ncalls:表示函数调用的次数;

        tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;

        percall:(第一个percall)等于 tottime/ncalls;

        cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;

        percall:(第二个percall)即函数运行一次的平均时间,等于 cumtime/ncalls;

        filename:lineno(function):每个函数调用的具体信息;

      由测试结果可知:我的程序中最耗时的函数为“process_buffer”(处理文本,统计单词数量),“counoutputText”(重定向输出)以及main函数.

      耗时函数的排行为:

                  1、main函数,函数的耗时为0.900 S

                  2、counoutputText函数,函数的耗时为0.847 S

                 3、process_buffer函数,函数的耗时为0.825 S

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

     由于本人水平有限,尝试了好久对程序进行优化,但是始终没有成功,优化之后反而更慢,所以没有对程序做进一步的优化。

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

    由于没有对程序进行优化,所以花费时间仍然和上面保持一样。

     

  • 相关阅读:
    升级ios 不能连原本的xcode /xcode不能抓帧/换xcode版本 build fail
    BlackBerry Key2 键盘扩展
    再议C风格变量声明
    怎样去除SVN中的某个版本之前的所有版本
    mysql 常用基础语句
    乱码问题
    sql server
    MySQL查询今天、昨天、上周、近30天、去年等的数据的方法
    java 时间转换
    sql server 日期
  • 原文地址:https://www.cnblogs.com/dongyahui/p/11574598.html
Copyright © 2011-2022 走看看