效能分析

要求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编辑  收藏  举报

导航