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

王超_nenu 王超_nenu     2022-09-20     399

关键词:

作业要求来自: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://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/956HTTPS地址:https://git.coding.net/jyj5951/wf.gitPartone准备工作 在开始性能分析前,我阅读了《构建之法》29-34页的“2.2性能分析工具”和邹欣老师有关效能分析的... 查看详情

第三周作业3功能测试

bugreport一.被检测的同学:方铭(1)标题:输入格式不符合题目要求,闪退(2)内容:测试环境:VS2010准备工作:得到方铭同学的代码测试步骤:建立新项目:fangm,运行代码,如下图:期待结果(来自作业要求,佐证材料):... 查看详情

软件工程第三周作业-功能测试

被测试同学一:高渊博(纯属随机抽取[捂脸])标题:统计文本时,将所有的统计结果都显示了出来,并不是只显示前十个,同时也没有进行排序。内容:  测试环境:Windows10操作系统、VS2017。  准备工作:在coding上将代码p... 查看详情

使用黑盒测试,测试个人项目——第三周作业

黑盒测试的定义  黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程... 查看详情

第三次作业-效能分析

一 对本周作业中的功能4(仅由文件重定向读入,不由控制台输入)做效能分析1.cpu使用百分比  要求0 以战争与和平作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。(2分)Windows... 查看详情

软工2017第三周作业之找bug——测试报告

作业要求来自:https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/957环境:windows7 cmd命令行一、被测试程序的作者:吴雨丹    吴雨丹的代码git地址:https://git.coding.net/clairewyd/wf.git1、标题:没有用控制台命令输入,输... 查看详情

软件工程第三周作业-功能测试

有一个算法竞赛的网站叫topcoder,后来杭电山寨了一个叫bestcoder的。跟传统的算法竞赛略有区别的是,交完代码会先跑小数据,小数据过了先被接收,不过不一定对。到了一个时间,可以造数据challenge别人代码。cha中了加分。这... 查看详情

第三周网络攻防作业

壹Kali视频学习(5-10节)首先根据视频的讲述,进行kali虚拟机的网络配置。并最终ping成功。结果如下所示:arping的命令执行结果如下:nbtscan命令执行如下:对目标进行waf进行探测,结果如下:对目标是否存在负载均衡进行探测... 查看详情

软件工程_东师站_第三周作业

...;师大站1第二周05200见我博客软件工程_东师站_课堂笔记第三周063站立会议、单元测试 查看详情

2017-2018-2《网络攻防实践》第三周作业(代码片段)

 第三周作业: 第一节:第三章学习:1.1网络信息收集网络信息收集的目的是尽可能了解目标,这包括目标的漏洞IP地址范围,外部网络阔朴结构等。  1.2网络信息收集方法网络踩点:Web搜索与挖掘(GoogleHacking,百... 查看详情

第三周作业

题目一:A乘以B.     1,实验代码               2,设计思路         第一步:填 查看详情

第三周作业3——bugreport

作业要求来自:https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/957准备工作:利用老师提供的git命令,批量pull所有同学的代码。截图如下:文件夹目录截图:环境:windows10cmd命令行(一)被测试程序的作者:陈建宇标题:命令行实... 查看详情

第三周作业

1、本周的作业请参照此文:http://www.ruanyifeng.com/blog/2015/12/git-workflow.html制定本组项目的GitHub版本更新流程。2、制定本组的代码规范、GitHub提交源码的标准。3、组长组织每周例会(可以使用群微信群试验一下每天沟通项目开发进... 查看详情

第三周作业

#include<stdio.h>intmain(){intA,B;scanf("%d%d",&A,&B);intC=A*B;printf("%d",C);return0;}   1打出框架模板   2根据提示内容填入程序 #include<stdio.h>intmain(){intA,B 查看详情

第三周作业

题目一7-9A乘以B1.实验代码#include<stdio.h>intmain(){inta,b;scanf("%d%d",&a,&b);printf("%d ",a*b);return0;}2.设计思路第一步:输入基本程序框架第二步:填写题目中的变量第三步:分清输入和输出变量并将其写到相应的地方3.遇到的问... 查看详情

第三周作业

1.实验代码#include<stdio.h>intmain(){inta,b;scanf("%d%d",&a,&b);printf("%d ",a*b);return0;} 2.设计思路①.先阅读好题目,清楚是什么内容的代码。②.在Devc++输入基本框架。③.在框架中添加输入变量和输出变量。④.编译运行。⑤.最... 查看详情

第三周作业之仿真与计算作业

1.励磁电压Uf=if·Rf=0.6·200V=120V。2.利用公式Te=Laf·if·ia,带入数据Te=12N·m,Laf=2H,if=0.6A,可知ia=10A。根据Ea=Laf·if·ωm,U=Ea+IaRa,得到n=30U/(Laf·ifπ)-30Te·Ra/(π(Laf·if))2,带入数据及TL=12,得额定转速n=1870rpm。3.如下图所示4.与上述计算结果基本... 查看详情

2017年软件工程第三次作业-2效能分析

要求0以战争与和平作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数      首先,我下载ptime.exe,不知道什么原因我下载下来以后运行老出现闪退现象。一直没法使用。我... 查看详情