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 = 0; i < S.Length; i++)
                    {
                        if (ha.ContainsKey(S[i]))
                        {
                            ha[S[i]] = (int)ha[S[i]] + 1;
                        }
                        else
                        {
                            ha.Add(S[i], 1);
                        }
                    }
                    string[] arrKey = new string[ha.Count];//存键
                    int[] arrValue = new int[ha.Count];//存值
                    ha.Keys.CopyTo(arrKey, 0);
                    ha.Values.CopyTo(arrValue, 0);
                    Console.WriteLine();
                    Console.WriteLine(">wf -s test.txt");
                    Console.WriteLine("total " + ha.Count);
                    Console.WriteLine();
                    Array.Sort(arrValue, arrKey);//排序
                    int n = 0;
                    for (int i = arrKey.Length - 1; i >= 0; i--)
                    {
                        if ((string)arrKey[i] != "")
                        {
                            if (n < 10)
                            {
                                //输出前10位多的单词,右对齐
                                Console.Write(arrKey[i].ToString().PadRight(12));
                                Console.WriteLine(arrValue[i].ToString());
                                n = n + 1;
                            }
                        }
                    }
        }

要求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 = 0; i < S.Length; i++)
                    {
                        if (ha.ContainsKey(S[i]))
                        {
                            ha[S[i]] = (int)ha[S[i]] + 1;
                        }
                        else
                        {
                            ha.Add(S[i], 1);
                        }
                    }
                    string[] arrKey = new string[ha.Count];//存键
                    int[] arrValue = new int[ha.Count];//存值
                    ha.Keys.CopyTo(arrKey, 0);
                    ha.Values.CopyTo(arrValue, 0);
                    Console.WriteLine();
                    Console.WriteLine(">wf -s >" + textFileName + ".txt");
                    Console.WriteLine("total " + ha.Count);
                    Console.WriteLine();
                    Array.Sort(arrValue, arrKey);//排序
                    int n = 0;
                    for (int i = arrKey.Length - 1; i >= 0; i--)
                    {
                        if ((string)arrKey[i] != "")
                        {
                            if (n < 10)
                            {
                                //输出前10位多的单词,右对齐
                                Console.Write(arrKey[i].ToString().PadRight(12));
                                Console.WriteLine(arrValue[i].ToString());
                                n = n + 1;
                            }
                        }
                    }
        }
    }
}

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

时间: 2024-11-04 22:51:59

wf效能分析的相关文章

第三周——效能分析

本周效能分析作业要求:https://edu.cnblogs.com/campus/nenu/SWE2017FALL/homework/956 HTTPS地址:https://git.coding.net/jyj5951/wf.git Part one 准备工作   在开始性能分析前,我阅读了<构建之法>29-34页的"2.2性能分析工具"和邹欣老师有关效能分析的博客(博客地址:http://www.cnblogs.com/xinz/archive/2011/11/20/2

第二周-频统计效能分析

根据作业要求对个人项目词频统计进行效能分析 工具:vs2015自带的效能分析工具: 1.第一次分析结果 string.split()方法和dictionary.contain()方法占比例较高; 由于水平问题暂时未想到解决方案,会继续探索,完善个人项目;

现代软件工程讲义 2 开发技术 - 效能分析

9.4  VSTS 效能分析工具 啊,效能分析,Performance!这是每一个程序员都梦想的事儿,让自己的程序跑得又快又好,最好是比别的同学快一个数量级,别人的程序是O(N^2),而我的程序是O(n*logN),或者是O(N),这是多爽的一项成就呀!VSTS提供了方便的效能分析工具,让我们能很快地找到程序的效能瓶颈,从而能有的放矢,改进程序.下面我们看一个具体的例子. 和同学们的作业类似,有这样一道题: 写一个程序,分析一个文本文件中各个词出现的频率,并且把频率最高的10个词打印出来. 果冻

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

java效能分析可以使用新版本jdk自带的jvisualvm工具进行统计 由于词频统计的运行在本人使用的机器上运行很快,无法被jvisualvm捕捉到线程的运行,所以捕捉的是eclipse的运行波动间接反映词频统计的效能 捕捉到的快照如下: 词频统计处理的文件为WarAndPeace,大小3282KB约3.3MB,输出结果到文件 在程序本身内开始和结束分别加入时间戳,差值平均为480-490ms.

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

要求0 以 战争与和平 作为输入文件,重读向由文件系统读入.连续三次运行,给出每次消耗时间.CPU参数       首先,我下载ptime.exe,不知道什么原因我下载下来以后运行老出现闪退现象.一直没法使用.我就接下来开始下载visual studio 2015,但是下载了一下午就是下不下来,我也很苦恼啊,电脑还是变成了巨难用,我下载的时候大概是缺少很多插件,我也不懂了.然后通过请教学长和同学,我使用了Very Sleepy CS软件来对功能进行效能分析. 由于我上次作业功能四没有实现,我没办

第三次作业-效能分析

一   对本周作业中的功能4(仅由文件重定向读入,不由控制台输入)做效能分析 1.cpu使用百分比 要求0 以 战争与和平 作为输入文件,重读向由文件系统读入.连续三次运行,给出每次消耗时间.CPU参数. (2分) Windows系统推荐使用 ptime.exe. 截图如下: 测试一: 测试二 测试三 总结时间   第一次 第二次 第三次 测试时间 141.063 135.549 136.606 要求1 给出你猜测程序的瓶颈.你认为优化会有最佳效果,或者在上周在此处做过优化 (或考虑到优化,因此

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

第五次作业--效能分析与几个问题(个人作业) 前言 阅读了大家对于本课程的目标和规划之后,想必很多同学都跃跃欲试,迫不及待想要提高自身实践能力,那么就从第一个个人项目开始吧,题目要求见下. 阅读 阅读<构建之法>第一章至第三章的内容,并在下方作业里体现出阅读后的成果.特别是第2章中的效能分析及个人软件开发流程(PSP). 参考文章: <构建之法>教学笔记--Python中的效能分析与几个问题 四则运算器效能分析 软工第2次作业-四则运算器 题目描述 可以选择以下题目(或者自主选择题

四则运算效能分析

Github项目地址:https://github.com/lsk-lsk/Python 估计将在程序的各个模块的开发上耗费的时间: 预测时间(分钟) Planning 计划 5 Estimate 估计这个任务需要多少时间 180 Development 开发 15 Analysis 需求分析 15 Design Spec 生成设计文档 5 Design Review 设计复审(和同事审核设计文档) 5 Coding Standerd 代码规范(为目前的开发制定合适的规范) 5 Design 具

自动生成小学四则运算题目并进行效能分析-改进版

github地址:https://github.com/lzhida/First-assignment/tree/newbranch 改进: 可以删除一些无意义的括号 题目要求: 1.能自动生成小学四则运算题目,并且不能出现负数: 2.支持真分数四则运算 PSP表格     预计耗时(分钟) 是实际耗时(分钟) Planning 计划 30 30 ·Estimate 估计这个任务需要多少时间 180 240 Development 开发 150 180 ·Analysis 需求分析 5 10 ·