码迷,mamicode.com
首页 > 其他好文 > 详细

20180925-3 效能分析

时间:2018-10-04 09:55:06      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:总结   地方   color   字符   使用   style   很多   技术   cpu使用率   

一、得出程序运行时间

运行截图如下:

技术分享图片

第一次运行时间为 0.942 s

技术分享图片

第二次运行时间为 0.826 s

技术分享图片

第三次运行时间为 0.861 s

平均运行时间为:0.876 s

CPU参数:Intel(R) Core(TM) i5-4200M CPU @ 2.50GHz  2.50GHz

 

二、猜测程序瓶颈

猜测一:每次查询map容器该单词是否出现过比较费时,因为个单词都要去查询一遍,优化过后可能运行快5%。

    if(mp[str]==0){
        s.push_back(str);
        mp[str]++;
        totalword++;
    }else{
        mp[str]++;
    }

猜测二:判断是否是单词组成元素比较费时,因为要去判断每一个字符,优化过后可能运行快10%。

if(isalpha(ch)!=0||(ch==\‘&&len>0)||ch==-||(ch>=0&&ch<=9&&len>0))

三、利用profile找出瓶颈

CPU使用率截图:

 

 

技术分享图片

 函数调用次数及运行时间截图:

技术分享图片

这儿可以看到最耗时的三个函数分别是:map的查找比较函数,string的拼接函数以及判断是否为字母函数。

map查找比较函数和string拼接函数:

 

if (mp[str] == 0) {
    s.push_back(str);
    mp[str]++;
    totalword++;
}
else {
    mp[str]++;
}

 

判断字母函数:

if (isalpha(ch) != 0 || (ch == \‘&&len>0) || ch == - || (ch >= 0&&ch <= 9&&len>0))

 

分析:map和string的两个函数可能需要调用堆栈,消耗时间比较多,而判断字母函数因为执行的次数多,导致最后运行时间就比较多。

四、优化程序

map和string想不出怎么优化,判断函数直接和字母进行比较。相应的函数变化如下:

if (text[i]>=a&&text[i]<=z) {
        ...
}
else if (text[i]>=A&&text[i]<=Z) {
    ...
}
else if ((text[i]== &&len>0)||text[i]==) {
        ...
}

五、再次profile测试

ptime运行时间截图:

技术分享图片

第一次运行时间为 0.826 s

技术分享图片

第二次运行时间为 0.817 s

技术分享图片

第三次运行时间为 0.827 s

平均运行时间为:0.823 s

比未修改时快了0.053s

CPU使用率截图:

技术分享图片

函数调用次数及运行时间截图:

技术分享图片

 可以看到map和string函数运行时间比例基本上没有变化,判断字母函数找不到了,其他运行函数的运行时间百分比都是低于0.1%的。

六、总结

经过修改,程序的运行速度有了一定的提升,有很多地方我还没能力去修改,如果能进一步修改,程序的运行速度会有进一步的提升。在以后的程序中,我们一定要灵活运用各种工具,优化程序,提升程序运行速度。

20180925-3 效能分析

标签:总结   地方   color   字符   使用   style   很多   技术   cpu使用率   

原文地址:https://www.cnblogs.com/sunsaijia/p/9734208.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!