wf效能分析
听从了老师的建议我请教了其他的同学,修改了代码实现了功能四,以下是我的效能测试:
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效能分析的更多相关文章
- 《构建之法》教学笔记——Python中的效能分析与几个问题
		
<构建之法:现代软件工程>中第2章对效能分析进行了介绍,基于的工具是VSTS.由于我教授的学生中只有部分同学选修了C#,若采用书中例子讲解,学生可能理解起来比较困难.不过所有这些学生都学习 ...
 - python实现四则运算和效能分析
		
代码github地址:https://github.com/yiduobaozhi/-1 PSP表格: 预测时间(分钟) planning 计划 15 Estimate 估计这个任务需要多少时间 10 ...
 - python词频统计及其效能分析
		
1) 博客开头给出自己的基本信息,格式建议如下: 学号2017****7128 姓名:肖文秀 词频统计及其效能分析仓库:https://gitee.com/aichenxi/word_frequenc ...
 - C#词频统计 效能分析
		
在邹老师的效能分析的建议下对上次写过的词频统计的程序进行分析改进. 效能分析:个人很浅显的认为就是程序的运行效率,代码的执行效率 1.VS 提供了自带的分析工具:performance tool (性 ...
 - 第五次作业——python效能分析与几个问题(个人作业)
		
第五次作业--效能分析与几个问题(个人作业) 前言 阅读了大家对于本课程的目标和规划之后,想必很多同学都跃跃欲试,迫不及待想要提高自身实践能力,那么就从第一个个人项目开始吧,题目要求见下. 阅读 阅读 ...
 - 《软件工程和Python》PYTHON效能分析和Django
		
资料汇总网站:http://www.yzhiliao.com/my/course/55 一..作业下面两个题目任选一题: (1)运用jieba库分词(或者你喜欢的其他库),并把代码发到git上去(不发 ...
 - 效能分析——词频统计的java实现方法的第一次改进
		
java效能分析可以使用JProfiler 词频统计处理的文件为WarAndPeace,大小3282KB约3.3MB,输出结果到文件 在程序本身内开始和结束分别加入时间戳,差值平均为480-490ms ...
 - 【week2】 词频统计效能分析
		
效能统计工具:Jprofiler License Key:L-Larry_Lau@163.com#23874-hrwpdp1sh1wrn#0620 该性能分析工具对服务器进行监听,图一是线程变化图,当 ...
 - 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% ...
 
随机推荐
- linux系统环境下的静态库和动态库的制作
			
linux系统下的应用编程需要系统提供的库文件,包括静态库或动态库.不管是静态库还是动态库,都是编译好的二进制文件.在我们编译程序时要链接的目标文件,静态库是链接的时候直接编译到程序里,和程序成为一体 ...
 - JQuery制作网页——第八章 使用jQuery操作DOM
			
1.DOM操作: DOM操作分为三类: ●DOM Core:任何一种支持DOM的编程语言都可以使用它,如getElementById().getElementsByName: ●HTML-DOM:用于 ...
 - 【sql server常用操作{增删改查}】
			
use DB_x go drop database DB_y create database DB_y --创建数据库 on primary --指定主数据文件 ( name= ...
 - Hexo博客部署到个人服务器
			
本文跳过阿里云创建git仓库.hexo部署到github的步骤,有需要的可以移步下面博客地址查看: 在阿里云服务器上创建git远程仓库 使用Hexo建立博客 一.服务器相关配置 本文使用hexo在本地 ...
 - Waltz of love
			
Waltz of love Love me tenderly Love me softly Close your eyes,fling to the dangcing hall Follow your ...
 - 【8086汇编-Day3】用debug做实验时的技巧与坑
			
Ⅰ· 无病呻吟 学一门语言,不动手实验是学不好的,在实验中不断遇坑然后解决,才有进益.所以写一下我在第一次汇编实验中的所思所想(王爽<汇编语言>第二章章末实验). Ⅱ · 实验内容 题解思 ...
 - Developing iOS 8 Apps with Swift (stanford)
			
https://www.youtube.com/watch?v=JkiB8Zwk-9Q&index=2&list=PLcX0opNQliFl0RTGbY9HHWCFg0Q8_fIF4
 - 封装List集合一个批量导入数据库的工具类
			
public class CommonDal { #region 数据导入相关 /// <summary> /// 批量导入数据 /// </summary> /// < ...
 - 180626-Spring之借助Redis设计一个简单访问计数器
			
文章链接:https://liuyueyi.github.io/hexblog/2018/06/26/180626-Spring之借助Redis设计一个简单访问计数器/ Spring之借助Redis设 ...
 - RAP2环境搭建整理(超详细)
			
RAP2是阿里开源的接口管理平台,最近搭建了一下,将部署文档整理如下: 如果途中遇坑会在文章末尾记录下来嘻嘻 首先,确定环境是否部署好. RAP2所需的环境为: node.js 8.9.4+ mysq ...