听从了老师的建议我请教了其他的同学,修改了代码实现了功能四,以下是我的效能测试:

1.采用ptime.exe测试的3次截图

可以看到的是三次执行时间分别为:1.449秒;0.915秒;0.871秒,取平均值为1.078秒

源码地址:https://coding.net/u/yuanyue2017102885/p/wf-part420170926/git

2.采用vs进行效能测试(vs2008无此功能)

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

答:我认为如果要再次提升运行速度,应该对哈希表处有所改进;看了其他同学的作业,我发现我的程序运行的算是比较快的,原因可能是因为我直接把要测试文档的路径写在了程序里面,但是这样做的缺点就是路径明确,如果其他同学在他们的环境下测试有可能出现找不到文件的情况。

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

答:在程序运行中最花费时间的是main函数(因为我的程序中就一个函数。。。)最耗费时间的应该是哈希表部分,代码片段如下:

static void Main(string[] args)
{
StreamReader ioInput = null;
ioInput = new StreamReader(Console.OpenStandardInput());
string textFileName;
Console.Write(">type ");
textFileName = Console.ReadLine();
StreamReader sreader = new StreamReader(@"C:\Users\dell-pc\desktop\test2.txt");
string afile = sreader.ReadToEnd();
afile = afile.ToLower();//转换为小写字母
//将空格跟标点符号定义出来
char[] c = { ' ', ',', '.', '?', '!', ':', ';', '\'', '\"' };
//分隔char[c]后产生的数组
string[] S = afile.Split(c);
//建立哈希表
Hashtable ha = new Hashtable();
for (int i = ; i < S.Length; i++)
{
if (ha.ContainsKey(S[i]))
{
ha[S[i]] = (int)ha[S[i]] + ;
}
else
{
ha.Add(S[i], );
}
}
string[] arrKey = new string[ha.Count];//存键
int[] arrValue = new int[ha.Count];//存值
ha.Keys.CopyTo(arrKey, );
ha.Values.CopyTo(arrValue, );
Console.WriteLine();
Console.WriteLine(">wf -s test.txt");
Console.WriteLine("total " + ha.Count);
Console.WriteLine();
Array.Sort(arrValue, arrKey);//排序
int n = ;
for (int i = arrKey.Length - ; i >= ; i--)
{
if ((string)arrKey[i] != "")
{
if (n < )
{
//输出前10位多的单词,右对齐
Console.Write(arrKey[i].ToString().PadRight());
Console.WriteLine(arrValue[i].ToString());
n = n + ;
}
}
}
}

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

答:我觉得自己的程序是比较简洁的,除了输入输出就是主要排序的哈希表部分了,每一条代码都有自己的功能而且我觉得已经无法压缩了。

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

答:在这篇博文的最开始已经附上了截图,我还求了个平均值1.078s。

要求5 程序运行时间。根据在教师的机器 (Windows8.1) 上运行的速度排名,分为3档。此题得分,第1档20分, 第2档10分,第3档5分。功能测试不能通过的,0分。(20分)

答:源码地址:https://coding.net/u/yuanyue2017102885/p/wf-part420170926/git

里面有一个program.cs的源码与consoleapplication2.exe的编译文件,它们是匹配的。

附加:考虑到我的程序是将原路径写在了代码里,这样老师在运行的时候肯定找不到原路径,这样我就没分了,所以我刚才对代码进行了一点修改,使得灵活性更高,但是在进行ptime测试的发现时间比刚才慢了好多,附上我改后的代码,coding.net里面的.cs文件跟.exe文件我也会重新上传,重新测的运行时间如下:

using System;
//using System.Collections.Generic;
//using System.Linq;
using System.Text;
using System.IO;
using System.Collections;
//using System.Text.RegularExpressions;
//using System.Diagnostics;
//using System.ComponentModel; namespace wf
{
class Program
{
static void Main(string[] args)
{
StreamReader ioInput = null;
ioInput = new StreamReader(Console.OpenStandardInput());
string textFileName;
Console.Write(">type ");
textFileName = Console.ReadLine();
string url = System.IO.Path.GetFullPath(textFileName+".txt");
StreamReader sreader = new StreamReader(url);
//StreamReader sreader = new StreamReader(@"C:\Users\dell-pc\desktop\test2.txt");
string afile = sreader.ReadToEnd();
afile = afile.ToLower();//转换为小写字母
//将空格跟标点符号定义出来
char[] c = { ' ', ',', '.', '?', '!', ':', ';', '\'', '\"' };
//分隔char[c]后产生的数组
string[] S = afile.Split(c);
//建立哈希表
Hashtable ha = new Hashtable();
for (int i = ; i < S.Length; i++)
{
if (ha.ContainsKey(S[i]))
{
ha[S[i]] = (int)ha[S[i]] + ;
}
else
{
ha.Add(S[i], );
}
}
string[] arrKey = new string[ha.Count];//存键
int[] arrValue = new int[ha.Count];//存值
ha.Keys.CopyTo(arrKey, );
ha.Values.CopyTo(arrValue, );
Console.WriteLine();
Console.WriteLine(">wf -s >" + textFileName + ".txt");
Console.WriteLine("total " + ha.Count);
Console.WriteLine();
Array.Sort(arrValue, arrKey);//排序
int n = ;
for (int i = arrKey.Length - ; i >= ; i--)
{
if ((string)arrKey[i] != "")
{
if (n < )
{
//输出前10位多的单词,右对齐
Console.Write(arrKey[i].ToString().PadRight());
Console.WriteLine(arrValue[i].ToString());
n = n + ;
}
}
}
}
}
}

删除了一些不必要的引用集,首测6秒多,我继续进行测试选取了其中速度比较快的3组测试数据,分别为:1.620秒;1.968秒;1.369秒。

wf效能分析的更多相关文章

  1. 《构建之法》教学笔记——Python中的效能分析与几个问题

    <构建之法:现代软件工程>中第2章对效能分析进行了介绍,基于的工具是VSTS.由于我教授的学生中只有部分同学选修了C#,若采用书中例子讲解,学生可能理解起来比较困难.不过所有这些学生都学习 ...

  2. python实现四则运算和效能分析

    代码github地址:https://github.com/yiduobaozhi/-1 PSP表格: 预测时间(分钟) planning 计划 15 Estimate 估计这个任务需要多少时间 10 ...

  3. python词频统计及其效能分析

    1) 博客开头给出自己的基本信息,格式建议如下: 学号2017****7128 姓名:肖文秀 词频统计及其效能分析仓库:https://gitee.com/aichenxi/word_frequenc ...

  4. C#词频统计 效能分析

    在邹老师的效能分析的建议下对上次写过的词频统计的程序进行分析改进. 效能分析:个人很浅显的认为就是程序的运行效率,代码的执行效率 1.VS 提供了自带的分析工具:performance tool (性 ...

  5. 第五次作业——python效能分析与几个问题(个人作业)

    第五次作业--效能分析与几个问题(个人作业) 前言 阅读了大家对于本课程的目标和规划之后,想必很多同学都跃跃欲试,迫不及待想要提高自身实践能力,那么就从第一个个人项目开始吧,题目要求见下. 阅读 阅读 ...

  6. 《软件工程和Python》PYTHON效能分析和Django

    资料汇总网站:http://www.yzhiliao.com/my/course/55 一..作业下面两个题目任选一题: (1)运用jieba库分词(或者你喜欢的其他库),并把代码发到git上去(不发 ...

  7. 效能分析——词频统计的java实现方法的第一次改进

    java效能分析可以使用JProfiler 词频统计处理的文件为WarAndPeace,大小3282KB约3.3MB,输出结果到文件 在程序本身内开始和结束分别加入时间戳,差值平均为480-490ms ...

  8. 【week2】 词频统计效能分析

    效能统计工具:Jprofiler License Key:L-Larry_Lau@163.com#23874-hrwpdp1sh1wrn#0620 该性能分析工具对服务器进行监听,图一是线程变化图,当 ...

  9. Application 效能分析有妙招 — 使用 perf 走天下(转载)

    转载:http://tech.mozilla.com.tw/posts/1803/application-%E6%95%88%E8%83%BD%E5%88%86%E6%9E%90-%E4%BD%BF% ...

随机推荐

  1. 异常笔记:运行hdfs copyFromLocal 上传文件报错

    把本地文件系统,复制到dfs文件系统时报错的错 [hadoop@localhost ~]$ hdfs dfs -copyFromLocal /home/hadoop/mk.txt /xg_test/ ...

  2. 【mongdb主从复制和同步】

    主从同步: Master: Slave: 副本集: #在卷本中加任意主机 #登录从 #登录主 #同步日志 #仲裁: 向集群中添加主机成为仲裁 #查看集群里的成员角色参数:

  3. React基本语法

    React 一.导入     0.局部安装 react 和 react-dom         npm install --save-dev react react-dom       1.react ...

  4. 2.3 摄像头驱动_vivi驱动程序分析

    学习目标:熟悉vivi的调用过程,分析vivi程序源码的ioctl函数: 一.vivi虚拟视频驱动测试方法 当我们接上usb摄像头设备时,系统会自动给我们安装对应的usb设备驱动程序.如果下次直接测试 ...

  5. print&input--Python

    1.print --> 打印到屏幕输出字符串 print("this is a dog!") -->代码 D:\Python\venv\Scripts\python.e ...

  6. 成都Uber优步司机奖励政策(3月20日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. 成都Uber优步司机奖励政策(1月16日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. 面试遇到的订单表sql的解决方案

    对于以下需求:用户表:users (user_id  int)订单表:order_tb(user_id int, or_time  date, or_money double)求以下用户:一月下过单, ...

  9. WSL跑linux服务程序

    前段时间折腾了一次WSL下的Apache,无奈遇到各种奇葩问题,总是解决不了,最终放弃,甚至得出了一个现在看来比较可笑的结论:WSL是不可能跑Linux服务程序的! 当时的思路想歪了,由于Apache ...

  10. yield学习

    如果要控制内存占用,最好不要用list来保存中间结果,而是通过iterable对象(range, xrange, generator等)来迭代.   yield 使函数变为generator,返回对象 ...