一、预计花在程序各部分的时间:
(1)对所给命令行参数的判断和处理,看它是否合法、是哪种模式。预计用时20min;
(2)关于目录操作:遍历给定目录下的所有文件,包括子目录和非目录文件。预计用时40min;
(3)对符合格式的文本文件进行读操作,用正则表达式匹配单词,用哈希表存储单词的词频,包括两种模式。 由于这里的“单词”不是传统中的单词,所以有较多细节要处理。
简单模式预计用时2h,扩展模式只要在简单模式的基础上稍加修改,预计用时1h;
(4)词频排序输出,预计用时1h;
(5)对程序的测试与优化,预计用时2h
预计花费总时间:7h
二、实际开发完善所用时间
(1)命令行参数判断与处理:约15min;
(2)递归遍历目录下的文件和文件夹:约50min;
(3)词频统计方面,先简单学习了基本正则表达式和哈希表的用法,并且后来把简单模式和扩展模式合并在一个函数中实现。期间遇到了很多很多小问题花费了较多时间。
实际用时大约5h;
(4)由于不仅要求按词频降序排列,词频相同者还要按基于ascll码的字典序排列,故花费了不少时间,约1.5h;
(5)顺利实现要求的功能后,着手进行代码的整合与优化,用时约1h;
进行测试与性能分析,约用时2h
(6)进行程序的容错性处理,约用时30min
实际用时总计约 11h
三、程序性能分析
由于第一次接触到VS2012的程序分析工具,不太熟悉,花了些时间。用性能分析工具运行程序时,可能是因为要统计个函数执行时间、CPU占用率等指标,程序运行时间明显比单纯运行程序所用时间长,所以花的时间较多。
这里用一个198k的英文文本文件进行性能分析
performance analysis graph如图:
各函数占用比例如下图:
函数调用样图:
四、所用测试用例
(1)所给路径为空文件夹
(2)所给路径不为空文件夹,但该文件夹下含有空的子文件夹
(3)所给路径下含有.txt 或 .cpp 或 .cs 或 .h 格式的空文件
(4)所给路径下内容完全一样的文件,看能否正确统计
(5)给定路径下含有大规模文本文件
(6)含有以数字开头字符串的文件
(7)含有各种非数字字母字符的文件,如*,、/~!……^等
(8)扩展模式下,含有以不同数字为后缀字符串的文件
(9)含有各种不同格式文件测试
(10)针对字典序的测试,如同时含有Mother1 ,abc1;同时含有windows2000,Windows1
五、收获
这次作业,我花了很多时间精力去完成。在开始做之前,我以为它很简单,可实际上去实现时,发现并不是所想的那么容易,因为有很多的细节需要处理,处理不好就会一直卡在那,或者性能非常弱。通过这次作业,学会了c#文件操作、正则表达式等等很多的东西。更重要的是,结识了vs2012的性能分析工具,发现它对我们来说是个非常有用的工具,如果能好好利用,相信将对我们的编程优化有很大的帮助!