效能分析
此作业的要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2145
程序地址: https://coding.net/u/lulululu88/p/xiaonengfenxi/git
一. 预备工作
将上周没有完成的功能4首先进行完善。
要求0 以战争与和平作为输入文件,重读向由文件系统读入。连续三次运行,给出每次消耗时间、CPU参数。 (2分)
进入文件所在目录,打开控制台,输入:
ptime wf -s < war_and_peace.txt
连续三次运行结果如下:
三次平均运行时间为 0.771s
2.猜测此程序的瓶颈:
我推测我的代码中可能出现问题的是正则表达式部分。此处我进行过较多修改,感觉为代码中最犹豫的部分。
word = Regex.Replace(word, @"[^a-zA-Z0-9\u4e00-\u9fa5\s]", " "); word = Regex.Replace(word, "[!@#$%^&*()`,./;':\"<>`?...]", " ");//过滤替换标点,用空格替换 String[] words = word.Split(' ');
二. 性能分析
我使用了vs自带性能分析工具Profiler,主要用来提升性能和寻找瓶颈。
分析过程如下:
分析结果如下:
函数占用比的分析
调用函数分析:
三. 优化修改
通过效能分析,我决定修改我的正则表达式部分,代码修改如下:
更改如下:
static String[] cut_to_string(string fileword)//利用正则表达式,split分割成一个个单词 { string[] filewords = null; fileword = fileword.ToLower();//全部变为小写字母 char[] ch = { ' ', '!', ',', ':', '.', '"', ';' }; filewords = fileword.Split(ch, StringSplitOptions.RemoveEmptyEntries); return filewords; }
优化后时间如下:
三次平均时间为0.406s,速度有了很明显的提升,之前平均时间为0.771s,可得这次优化是成功的。
再次profile,截图如下: