上课的时候第一次看到这个Project的题目,心中原有一点小窃喜,因为上学期面向对象课程上用java写过一个类似的关于词频统计的project,不过后来在老师的博客上看到具体的要求之后,发现我太天真了,首先老师明确要求之只能用C++或C#写,虽然上学期上过刘禹老师的的C++/C#选修课,可是只是理论上的略知一二,并没有真正地写过什么project,所以看到这个要求心里还是有点虚,不过在了解到C#跟java相似度非常高之后,果断选择了用C#写(虽然我的java也是上学期逼不得已速成的,感觉还并没有学到精髓)。
还仅仅是看到我又要速成一门语言了,以及project的要求竟然通篇都是我避之不及的英文,还不知道这堆它们认识我我不认识它们的字母里深藏着多大的功与名,事已至此,我就只能轻抚着我的小心脏,默念道“All is well...All is Well...”。待我好好静下心来,从理解需求到完成性能测试以及优化前后跨越了好几天,其中有一晚还通宵了(毕竟我还年轻……)……不管成绩结果如何把,至少我努力过。
一 项目时间规划及实际用时
序号 | 步骤 | 预计时间(hour) | 实际用时(hour) |
1 | 理解项目需求 | 1 | 1.5 |
2 | 分析并架构 | 1 | 2 |
3 | 编写代码并调试程序 | 6 | n(前后跨越了3天) |
4 | 多样例测试 | 1 | 1.5 |
5 | 性能优化并完善 | 1 | 1 |
感觉写代码之前还是要非常非常认真地理解和分析项目需求,我这次在这方面绕了不少弯路,主要也是因为自己的英文太渣%>_<%...再加上自己的经验也不足,在有些方面并不能很好地理解老师的意思(⊙﹏⊙),比如在考虑输入的时候,并没有想太多就直接用控制台输入了,还有,在正式开始写代码之前,由于对C#的不熟悉且查阅的资料太少,心中只有一个很简略的架构,并没有考虑具体细节方面的可能性和复杂度,一边写一边想,以至于再后来发现有的方法不可行时改动幅度就太大了,浪费了不少时间……等等等等,不少地方都走了弯路,很多地方都幸亏有小伙伴的提醒我才悬崖勒马,不然我估计我还会在我逗比的道路上越走越远的……
二 性能分析
因为我在写代码的时候就充分考虑了性能方面,用的都是我力所能及速度较快的数据结构,根据后期的性能分析也可以看出,性能也还是不错的,所以我并没有太多地修改。
下列分析结果是扫描的一个5.71GB的大文件夹。
可以看出大概用了30s,对于一个这么大的文件来说,应该还是不错的。
判断单词的合法性和分割单词的函数占了整个程序运行的大半部分时间吧
感觉这个性能应该还可以吧...不过确实我也不知道该怎么优化了...
三 测试
测试样例:
1.测试单词的分割(针对两种模式,我用了两种不同的分割方法)
dsa,hdoid hh&s4356auh das sdha&^$(
2.测试单词的判重
hello Hello HELLO HeLLO 123hello HELLO123
3.测试单词合法性的判定
123file file File FILE file123&
4.测试中文字符对分割的影响
C#教程实用版sdhad
dhasi123dha好 开心hdios
注:中文字符都作为分隔符
5.测试输出单词是否是忽略大小写的相同单词中ASCII最小的,以及连续单词选取的合法性与排序(此为小伙伴的测试用例)
txt file
tXT file
TxT fiLe
How 、、Are You?
how old are ‘’you
hOw oLd。。 aRe yOu
HoW arE YOu?
四 感受
首先要感慨的当然是,我居然耐着性子做完了那么长的一片英语阅读o(╯□╰)o,而且是逐字逐句地分析(不要笑,我是真的头疼英文,看着就困=_=)……这使我对英文的苦逼学习迈出了一大步(虽然讨厌,不过还是要好好学的),而且在查阅资料时看的都是Microsoft官网上的英文文档,并没有原来对英文的反感了,我感觉我好好地看完老师这学期所有的project任务,我的英文水平一定可以大大提升O(∩_∩)O~
说正经的,我现在终于感觉到学习一门新的语言最好的入门良药就是deadline(其实所有的这是提高效率的最佳途径),当然,这前提是抱着想学新东西的想法独立认真地完成任务,虽然为了这一个小小的Project我牺牲了不少,这几天几乎都是将近12点才回宿舍,周日还通宵了,写完代码的那一刻直接趴倒在实验室o(╯□╰)o~,这一次的project真的是让我快速入门了C#,更提高了自己的自信心,果然程序猿还是最喜欢看到调试成功,输出结果正确的那一刹那,嘿嘿,虽然过程是令人抓狂的。
这是我第一次使用VS(说来也羞愧),也是第一次接触到性能分析,比起以前写代码仅考虑结果的正确性以及功能的完善性,现今也会考虑所用的数据结构对性能的影响,也算是一大进步吧。
这一次的Project不仅仅是让我学到了新知识,更是培养了我的脾性,让我变得更加耐心,心理承受能力也更加强大了。