码迷,mamicode.com
首页 > 其他好文 > 详细

第三周作业2——效能测试

时间:2017-09-26 01:08:26      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:eem   ref   2017年   http   cto   https   tor   arc   strlen   

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

(此处想加一个目录)

要求0 (旧)

以 战争与和平 作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、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日星期天写的一部分。在当天的班级微信群中,老师再次建议我重新写一下。


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(新)

技术分享

技术分享

技术分享

平均运行时间=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      

分析:

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

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

要求3 修改瓶颈、原理分析

 技术分享

技术分享

怎么时间反而长了?之前的是采样的?明天继续搞。【今晚还要复习matlab,明天课堂测试,拖到现在才复习.....】

本来想明天整理好再先发出来,但是因为看到老师在评论,所以想还是早点发出来吧,万一被评论到,有问题明天还能改~不过这样是不是对读者不太负责任呀,请见谅~

 

第三周作业2——效能测试

标签:eem   ref   2017年   http   cto   https   tor   arc   strlen   

原文地址:http://www.cnblogs.com/wangc034/p/7586769.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!