第一次软件工程作业

      终于写完了这个作业,今天花了一天的时间呢,与昨天晚上预计的花一下午的时间相差甚远啊,感慨中。。。。由于一直都是用C和C++写程序,因此改不了一些写C程序的风格,再加上对C#刚接触,只知道它和java类似。

      早上吃完早饭开始构思怎么写这个程序,把大体的框架写了出来,剩下的就是给各个方法添加实现了。特别郁闷的是,一开始不知道C#里List提供了快排的函数(这个晚上才知道),于是我自己在主类里声明了一个static string [] word;的数组存储单词,这时候很显然地认识到数组的上限是限制程序处理数据大小的瓶颈,自己写了一个快排的函数。在数据量较小的情况下,运行的挺好的,下午四点半左右写完第一次的代码。觉得挺高兴的。

      下午去吃晚饭的时候和同学讨论了这次作业大家都是如何实现的,这时候,有个同学在北航未来花园里下了一个超大的文件(135 MB ),他用他的程序跑用了2分钟,同行的另外两个同学的程序,一个一直没有跑出结果来,一个程序直接崩溃了。回来后,先是把我的代码改了一下(之前用数组的改成用List),我把那个文件拿过来用自己的程序跑了一下,等了好久啊,都6分钟还是没有结果,很郁闷,我都跑到别的宿舍去串了下门,太难等了;当我回到宿舍时,终于出结果了,可是这时候已经跑了13分钟了。终于知道计算机是一个多么慢的机器了,好感慨啊。自己的程序和同学的差距一下就看出来了。。。

      晚上一直在纠结怎么优化自己的代码,一直工作到现在,发现我用

            DirectoryInfo folder = new DirectoryInfo(path);
            string[] fileFormat = { "*.txt", "*.cpp", "*.cs", "*.h" };
            foreach (string fFormat in fileFormat)
            {
                FileInfo[] files = folder.GetFiles("*.txt", SearchOption.AllDirectories);
                foreach (FileInfo file in files)
                {
                    using (StreamReader sr = file.OpenText())

………………

     多遍历了文件夹三遍。最后同学介绍了一个方法,

                string[] allFiles = Directory.GetFiles(path);

                for (int i = 0; i < allFiles.Count(); i++)
                {
                    char tempc;
                    StringBuilder temps = new StringBuilder();

                    using (StreamReader sr = new StreamReader(allFiles[i]))

………………

      这样只要遍历文件夹一次,但是要自己写一个递归调用。不过我相信FileInfo[] files = folder.GetFiles("*.txt", SearchOption.AllDirectories);里也是有递归的。

      这次作业收获比较多,认识到了自己的差距。。。13分钟,出去还敢说是北航计算机系的吗

posted @ 2012-09-23 23:49  李忠  阅读(190)  评论(0)    收藏  举报