纠结了这么多天,终于能写点字出来了,我是有多不会写东西啊。。。
一、工程开始之前
没有着手开始码代码之前,我一直都很怀疑自己能不能在规定时间内把工程完成。在仔细思考过整个工程的实现方法后,我大致预计的使用时间为:
①一个主类,仅包含一个Main方法,处理和输出结果;(半小时)
②一个fileoperate类,顾名思义,用作文件处理,包括findallfiles方法--用队列查找出目录文件夹下的所有文件;和findwords方法--处理每个文件里的词频统计;以及output--输出结果;(主要工作,四小时——五小时)
③一个word类,每个词是一个word对象。(半小时)
算上一定的debug时间,预计总共耗时会在七小时左右。
二、工程完成之后的时间统计
完成之后感觉实际耗时应该比原计划少一些,主要时间当然还是花在了fileoperate类上,查找相关方法,比如说GetFiles和GetDirectory之类的。不过感觉C#还是相对比较容易上手的,有这么多可以直接调用的方法。这一部分大概用时三个半小时。
其他部分的工作用时与预计没有太大差距。
最省时间的是程序没有出现太大问题,所以大大减少了debug时间。
三、性能
因为暂时没有装上vs2012,就不贴那个性能分析图了。
在查找目录下所有文件的算法中,用了一个队列,个人感觉应该不会是影响性能的主要原因。。
词频统计,用的是Split分词,目测有遗漏某些分隔符,毕竟没有状态机或者正则表达式可能做到的那么完善,但是效率应该还是能介于前两者之间的。
至于word类,在新的需求更改以后借鉴了一下同学的方法,endword用来记录出现的单词的最小形式。
四、十组测试数据
正好前几天下了一个547本英文原版名著的txt集合,就分别弄成了十组测试数据,出来的结果还是比较让人满意的,只是效率确实不高。
五、收获
C#真的比较容易上手,即使原来没用过C#的人写这样一个程序也不是太困难的事,C#自带的很多方法可以帮coder解决不少问题。
正则表达式和自动机是不错的东西,貌似应该是等价的,但是不懂为什么自动机比正则的效率高很多。