效能分析
要求0
—具体要求:以 战争与和平 作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。
先执行程序
利用老师给的ptime程序链接,下载并安装了ptime,然后新建了一个文件夹。把我执行后的程序以及战争与和平的txt文件和ptime程序放入一个新建文件夹中。然后从控制台输入.txt文件。并且利用ptime计算程序运行时间。截图如下:
看了其他同学的时间都比较短,我的很长,显然需要很大的改进。
要求1 给出你猜测程序的瓶颈。你认为优化会有最佳效果,或者在上周在此处做过优化 (或考虑到优化,因此更差的代码没有写出) 。
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); } } //int sum = 0; 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);//按哈希表的值进行排序 //遍历哈希表 //foreach (DictionaryEntry de in ha) //{ //输出 //Console.WriteLine(de.Key + ":" + de.Value); // Console.Write(ha.Count); // }
我认为这部分代码是我程序的瓶颈,因为建立哈希表以及排序是非常繁琐的,要各个汉字之间比对,并且分组。所以我认为这部分耗时较长。我认为优化后的最佳效果大概时间会节省一半左右。
要求2
—具体要求:通过 profile 找出程序的瓶颈。给出程序运行中最花费时间的3个函数(或代码片断)。要求包括截图。
占有率最高的就是用哈希表的值进行排序这个函数,显然我的猜测是正确的。但是我还没有找到优化它的方式。我想我再深入学习一下C#就能够做到优化它。
posted on 2017-09-26 20:39 图子会变成好的程序员 阅读(292) 评论(0) 编辑 收藏 举报