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

要求0:以 战争与和平 作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。

第一次运行结果:

本次程序运行所消耗的时间为1.2秒。

第二次运行结果:

本次程序运行所消耗的时间为936毫秒。

第三次运行结果:

本次程序运行所消耗的时间为975毫秒。

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

上周的代码我使用的是结构体数组来对分割好的单词进行存储并采用冒泡排序,效果非常不理想,统计完war_and_peace.txt这个文件需要7秒左右。

struct words
{
	int num;
	char word[20];
};
while (feof(fp) == 0)
{
	fscanf(fp, "%s", temp); //输入文件名
	//字符串过滤
	dispose(temp);
	if (temp != NULL)
	{
		int i = 0;  //标记返回值
					//判断是否有重复
		if ((i = issame(str, temp, n)) != 0)
		{
			//有重复
			str[i].num += 1;
		}
		else
		{
			//没有重复
			sprintf(str[n].word, temp);
			str[n].num += 1;
			n++;
		}
	}
}

这周代码存储单词采用了哈希表存储并采用快速排序,效果有了显著的提升,统计war_and_peace.txt这个文件仅需要900毫秒左右。

Hashtable strTab = new Hashtable();
for (int i = 0; i < strArr.Length; i++)
{
    if (strArr[i] != "")
    {
        if (strTab.Contains(strArr[i]))
        {
            //已有
            strTab[strArr[i]] = (int)strTab[strArr[i]] + 1;
        }
        else
        {
            //没有
            strTab.Add(strArr[i], 1);
        }
    }
}

因为哈希表有查找效率高的优点,所以改用了哈希表之后运行速度有了明显的提升。

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

本程序中,以上三个函数最花费时间。

上面三个函数中最花费时间的是Statistics函数,因为函数中有对字符串进行分割的操作:

string[] strArr = str.Split(ch);

上面代码通过Split()函数对字符串进行分割,导致花费的时间非常多。

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

本人尝试过一个字符一个字符的读取,然后当读取到自定义的分隔符后,将读取出来的字符串存入到哈希表中,但是这个方法更慢,所以目前最优的方案是就是用Split()函数来对字符串进行分割。

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

由于本人无力对程序进行优化,所以此时最花费时间的三个函数没有变。

时间: 2024-08-10 05:40:54

软件工程第三次作业 - 效能分析的相关文章

软件工程第三周作业-效能分析

运行三次ptime.exe,时间如下: 平均速度0.511s,我觉得挺快的. profile 等待更新.

第三次作业-效能分析

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

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

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

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

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

软件工程——第三次作业(二)

对上周作业中的功能4 (仅由文件重定向读入,不由控制台读入) 做效能分析. 功能4:(还没改出来,出错,待续.) git:

软件工程第三周作业:微软必应词典案例分析

0x01 :微软必应词典案例分析 0x0104 :微软必应词典功能性BUG说明       0x010404 : BUG – 1 – 模块功能未实现 运行环境或平台 iOS 9.0.1 必应词典软件版本 版本3.5,版权所有@2014 Microsoft 软件测试BUG特征 [优先级1]应用程序模块功能未实现,包含整个模块不能正常运行 重现步骤 1. 打开必应词典软件进入设置中,选择跨软件查词设置,设置为打开和一直运行 2. 按照使用说明所说随意打开某一App(这里选择提醒事项) 3. 按使用说

软件工程第三次作业(微软小娜案例分析)

第一部分 调研, 评测 1.上手体验  我使用的是win10系统,所以自带Cortana,之后又在手机上下载了安卓版本.第一感受不管是在电脑上还是在手机上都比较流畅,优化的比较好.电脑上使用也比较方便,在桌面上就能直接打开,安卓手机则需要下载.使用上,语音识别还算准确,而且搜索到的信息也比较有用. 2.bug测试 (1)语音输入后莫名弹出必应. (2)语音识别不太准确 3. 用专业的语言描述 (每个bug 不少于 40字),如有必要, 可以配图. 当语音输入有标点时,Cortana有几率打开ed

2017秋-软件工程第三次作业(1)-第三周例行总结

第三周例行报告   1本周PSP   2字数统计   博文字数统计不包含本作业中的文字,因为本作业是在截图后写了一些想法之后才得到的. 3代码行数   本周代码工作几乎是把上周的所有代码重写一遍,并进行了大量的尝试工作.有这样的疑问:注释掉的.删除掉的.尝试后废弃不用的代码算不算最后的代码行数呢? 4博文字数   5饼状图 时间统计和上周的饼状图非常相似,为了证明不是从上周的粘贴而来,特意将数值给出 总结: 1本周学习过程中,大部分的工作依旧集中在提交作业前2天. 2感谢老师将提交作业时间设置为

2018软件工程第三次作业

最大连续子数组和(最大子段和) 一.问题描述 问题描述: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的子段和的最大值.当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+-+a[j]},1<=i<=j<=n 例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20. 二.题目分析 本