作业要求来自:https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/956

git地址: https://git.coding.net/SuperCodingChao/wf.git

2017-10-12 13:30变更地址 https://git.coding.net/SuperCodingChao/wf_again.git

目录:

0.a 上周作业的ptime测试

0.b 重写程序之后的ptime测试

1.瓶颈猜测&分析

2.profile&三个函数

3.优化

4.profile&ptime

要求0 (a)

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

Windows系统推荐使用 ptime.exe。下载在此[https://coding.net/u/younggift/p/word_count_demo/git/blob/master/ptime.exe]。

运行方法    ptime wf -s < war_and_peace.txt

我的功能4测试失败,因为我的重定向功能是读取一行字符串,遇到回车之后会停止。运行截图:

所以我先采取功能2的方式吧。尽管如此,还是不符合要求的。

avg = (0.541+0.269+0.266)/3 =0.359(保留3位有效数字)

要求1

这是上周就这样写的,我不知道还有什么地方可以优化。

1         string[] s = cnt.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);2         //len是词的总个数,计算一遍就可以了
3         len = s.Length;
4         for (int i = 0; i < len; i++)
5         {
6             //省略,处理每个词
7         }        

以上是2017年9月24日星期天写的一部分。在当天的班级微信群中,老师再次建议我重新写一下。so...


2017年9月25日今天,我花了大概2h40min时间实现了功能4-1。对于程序中用到的函数更加熟悉了。不过还是不仔细、全面吧。比如

StreamReader streamReader = new StreamReader(Console.OpenStandardInput(),Encoding.Default); 

这里用到的OpenStandardInput()函数,是我在Ranh学长程序里学到的。之前我写的是

string text = Console.ReadLine();

只能读取一行。

我还没有学习关于标准输入输出函数相关的知识,是不是也要被怼。【捂脸】先完成作业吧:p

所以我想用新写的程序来作为效能测试的程序。但是还没有建立git仓库,明天建立,上传到coding.net上。


要求0(b)

平均运行时间=0.635s

要求1

我猜测的可优化处:

  • 1

     strlen = str.Length;
     if (strlen > maxlen) maxlen = strlen; 

因为这个功能没有要求对齐(不知道是否是故意如此设置?)我在字符串拼接的时候删掉了拼接空格的循环。但是这里计算每个单词的长度找最           大值这里没有注释。

  • 2

     while((line = streamReader.ReadLine()) != null)

    这里是不知道有没有可以优化的,我不知道优化方法。因为这篇效能测试提到http://www.cnblogs.com/WeSure6/p/5275715.html,但是他是直接读入特定的文件。相似,又不同。我现在还不明白效能测试的样本是什么,我一会儿进行效能测试,是要改成直接读文件吗?昨天测试的一波都不成功,没有生成测试报告,有的生成了,但是里面的函数都不是我程序里面写的类方法,和范例中的博客的截图都不太一样。然后当时比较烦躁,没有截图和记录。

要求2

嗯……后来在诊断工具发现了不一样的展示,然后点击调试,看诊断工具。

程序运行中最花费时间的3个函数的代码片断:

1      line = line.Replace("'s", "").Replace("'m", "").Replace("'", "").Replace("—", "").Replace("?", "").Replace("!", "").Replace(",", "").Replace(":", "").Replace("\"", "").Replace("“", "").Replace("”", "").Replace(".", "").Replace(";", "").Replace(")", "").Replace("(", "");
2      line = line.Replace("1", "").Replace("2", "").Replace("3", "").Replace("4", "").Replace("5", "").Replace("6", "").Replace("7", "").Replace("8", "").Replace("9", "").Replace("0", "").Replace("*","");
3
4      string pat = " ";
5      string[] wordlist = Regex.Split(line, pat);
6
7      Directory类操作
8      

分析:Replace()的效率问题。bing之后http://www.baiwanzhan.com/site/t122693/这里提到StringBuilder效率更高。

https://www.52jbj.com/rjbc/498788.html 和http://www.cnblogs.com/reggieqiao/p/5902149.html这里解释了原理。http://www.cnblogs.com/tonysuen/archive/2010/03/04/1678447.html这里查到用法。

要求3

修改以下代码,还有变量的类型定义。

C#使用string(System.String的别名)类型表示字符串,string是引用类型。其特点:

1.它是引用类型,在堆上分配内存
2.运算时会产生一个新的实例
3.String 对象一旦生成不可改变(Immutable)
4.定义相等运算符(== 和 !=)是为了比较 String 对象的值(而不是引用)

每次使用System.String类中的方法之一或者是进行运算时(如赋值、拼接等),都要在内存中创建一个新的字符串对象,这就需要为该新对象分配内存空间,而StringBuilder则不会。StringBuilder对象在做字符串连接操作时是在原来的字符串上进行修改,改善了性能。

要求4  再次profile&最耗费的三个函数:

修改之后,我改成命令行读入重定向输入,然后用老师提供的ptime工具再次测试程序运行时间。

第一次 0.582
第二次 0.577
第三次 0.573
平均时间 0.5773

比优化前的0.635快了一点点。另外两个函数我不知道有什么可以优化的地方。如果优化,是否就换用别的算法了呢?感觉这个速度已经比较快了。还有就是没有处理对齐,也是速度快的原因吧。再用“固定文件读入”测试,耗费最多的前三个函数就更新了。

就优化到这里吧。感觉VS的工具太强大,可好多功能都没用过、不会用。这次的效能分析,感觉也没有真正的吃透。

https://docs.microsoft.com/zh-cn/visualstudio/profiling/profiling-feature-tour

https://docs.microsoft.com/zh-cn/visualstudio/profiling/beginners-guide-to-performance-profiling

这两篇文档我是我搜到的相对友好容易理解的。以后应该还会用到,mark一下。

测试结果:

C:\git\ase_calc>ptime wf -s < war_and_peace.txt

ptime 1.0 for Win32, Freeware - http://www.pc-tools.net/
Copyright(C) 2002, Jem Berkes <jberkes@pc-tools.net>

=== wf -s ===
total 20160
the 34561
and 22147
to 16709
of 14990
a 10515
he 9916
in 8800
that 8074
his 7965
was 7327

Execution time: 1.291 s

C:\git\ase_calc>ptime wf -s < war_and_peace.txt

ptime 1.0 for Win32, Freeware - http://www.pc-tools.net/
Copyright(C) 2002, Jem Berkes <jberkes@pc-tools.net>

=== wf -s ===
total 20160
the 34561
and 22147
to 16709
of 14990
a 10515
he 9916
in 8800
that 8074
his 7965
was 7327

Execution time: 1.202 s

C:\git\ase_calc>ptime wf -s < war_and_peace.txt

ptime 1.0 for Win32, Freeware - http://www.pc-tools.net/
Copyright(C) 2002, Jem Berkes <jberkes@pc-tools.net>

=== wf -s ===
total 20160
the 34561
and 22147
to 16709
of 14990
a 10515
he 9916
in 8800
that 8074
his 7965
was 7327

Execution time: 0.888 s

C:\git\ase_calc>ptime wf -s < war_and_peace.txt

ptime 1.0 for Win32, Freeware - http://www.pc-tools.net/
Copyright(C) 2002, Jem Berkes <jberkes@pc-tools.net>

=== wf -s ===
total 20160
the 34561
and 22147
to 16709
of 14990
a 10515
he 9916
in 8800
that 8074
his 7965
was 7327

Execution time: 0.877 s

C:\git\ase_calc>

平均时间为:1.127s

转载于:https://www.cnblogs.com/wangc034/p/7586769.html

第三周作业2——效能测试相关推荐

  1. 2017-2018-1 JAVA实验站 第三周作业

    2017-2018-1 JAVA实验站 第三周作业 团队展示 队名 JAVA实验站 拟作的团队项目描述 (2048)增加其他模式,使得2048更加丰富多彩 团队的首次合照 团队的特色描述 团队内部很团 ...

  2. 20189221 2018-2019-2 《密码与安全新技术专题》第三周作业

    20189221 2018-2019-2 <密码与安全新技术专题>第三周作业 课程:<密码与安全新技术专题> 班级: 201892 姓名: 郭开世 学号:20189221 上课 ...

  3. 【中文】【吴恩达课后编程作业】Course 5 - 序列模型 - 第三周作业 - 机器翻译与触发词检测

    [中文][吴恩达课后编程作业]Course 5 - 序列模型 - 第三周作业 - 机器翻译与触发词检测 上一篇:[课程5 - 第三周测验]※※※※※ [回到目录]※※※※※下一篇:无 致谢: 感谢@e ...

  4. 【中文】【吴恩达课后编程作业】Course 2 - 改善深层神经网络 - 第三周作业

    [中文][吴恩达课后编程作业]Course 2 - 改善深层神经网络 - 第三周作业 - TensorFlow入门 上一篇: [课程2 - 第三周测验]※※※※※ [回到目录]※※※※※下一篇: [课 ...

  5. 《密码与安全新技术专题》第三周作业

    学号 2018-2019-2 <密码与安全新技术专题>第三周作业 课程:<密码与安全新技术专题> 班级: 92班 姓名:张宇翔 学号:20189211 上课教师:谢四江 上课日 ...

  6. 学号20189220 2018-2019-2 《密码与安全新技术专题》第三周作业

    学号20189220 2018-2019-2 <密码与安全新技术专题>第三周作业 课程:<密码与安全新技术专题> 班级: 1892 姓名: 余超 学号:20189220 上课教 ...

  7. 20189200余超 2018-2019-2 移动平台应用开发实践第三周作业

    2018-2019-2 移动平台应用开发实践第三周作业 核心类 基本类型的封装类 封装类: java语言认为一切皆对象.8个基本数据类型野应该具备对应的对象.通过封装类可以把8个基本类型的值封装对象进 ...

  8. 吴恩达深度学习-Course4第三周作业 yolo.h5文件读取错误解决方法

    这个yolo.h5文件走了不少弯路呐,不过最后终于搞好了,现在把最详细的脱坑过程记录下来,希望小伙伴们少走些弯路. 最初的代码是从下面这个大佬博主的百度网盘下载的,但是h5文件无法读取.(22条消息) ...

  9. 2017-2018-1 Java演绎法 第三周 作业

    团队任务:团队展示与选题 团队展示 队员学号及姓名 学号 姓名 主要负责工作 20162315 马军 日常统计,项目部分代码 20162316 刘诚昊 项目部分代码,代码质量测试 20162317 袁 ...

最新文章

  1. CSS:当子元素皆浮动,撑开父元素的3种方式
  2. 关于sql中case when的用法
  3. Golomb及指数哥伦布编码原理介绍及实现
  4. DEBUGnbsp;设置监视点:判断变量值
  5. 8086汇编语言指令总结
  6. python程序设计报告-20192416 实验四《Python程序设计》综合实践报告
  7. python基础包括什么-Python基础教程 模块包含什么
  8. 今日arXiv精选 | 11篇EMNLP 2021最新论文
  9. WPF将数据库和GridView绑定并更改GridView模板
  10. 那些你不知道的程序员的多重身份
  11. android开发实例-标准意图方法Intent(二)
  12. pta求阶乘序列前n项和_求极限方法总结
  13. 怎么压缩图片文件大小?
  14. alsa声卡驱动一:声卡的创建
  15. 一个由“2020年1月7日 京东出现的重大 Bug 漏洞“引起的思考......
  16. [MTK]LCD 调试总结
  17. 怎样把两个excel表格合并
  18. 联想小新 青春版-14笔记本电脑重装系统教程
  19. Web前后端缓存技术
  20. Linux基本认识及环境搭建

热门文章

  1. 用计算机用图解法求理论塔板数,用Excel图解法求精馏塔理论塔板数.pdf
  2. Spring Security Oauth2 (三) 密码码模式
  3. Pandas to_numeric
  4. Spark WordCount
  5. requests session
  6. opencv-api drawKeyPoints
  7. request.post
  8. Sphinx 文档例子
  9. 软件测试测试用例编写 不超过7步骤_教你快速编写一个合格的测试用例!
  10. linux脚本中swith,BeanShell中switch语句