第一次软件工程作业
终于写完了这个作业,今天花了一天的时间呢,与昨天晚上预计的花一下午的时间相差甚远啊,感慨中。。。。由于一直都是用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分钟,出去还敢说是北航计算机系的吗
浙公网安备 33010602011771号