开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 14067|回复: 71
收起左侧

[易源码分享] 【史诗】论优化的小技巧

[复制链接]

发表于 2019-3-13 18:33:39 | 显示全部楼层 |阅读模式   山东省济南市
分享源码
界面截图: -
是否带模块: 纯源码
备注说明: -
本帖最后由 流星暴雨 于 2019-3-13 18:55 编辑

作为一个未来的网红,肯定是要多多水贴的


今天呢,在问答区看到一位易友在问如何优化,我就以他的代码为例来说一点关于优化的小技巧(骚操作)吧
clipboard.png

拿过代码以后,先大体猜一下哪里耗时比较长,然后再设法优化
他的代码只用了核心库,核心库问题不大,那么如果有问题也大概率出在他的用法上


先来找有没有可以大幅度优化的地方

例如 频繁内存分配大量计算
一般这就是导致效率低的罪魁祸首


首先是重定义数组,3次重定义都没有必要,不过这里应该对总耗时影响不大 pass
其次是分割文本,次数也不多,而且可根据后面的判断得出,只会分割成2、3份,应该也不会影响太大 pass


最后就是 取文本中间 了,他的 取文本中间 在两层循环中
而且根据上下文来看,这里就是识别的核心
取文本中间 单次耗时应该很少,但这里会调用 非常非常多次
所以我猜大部分耗时都在这里,来尝试优化一下


怎么优化呢
取文本中间 本身是个很简单的操作,优化空间不大,我们从侧面入手
取文本中间,会返回取到的文本,这里也就是按字符串的顺序一个字一个字返回
这里的问题不在于这个方法的耗时,而是在返回时的内存分配
前面说过了,内存分配对效率影响很大,这个方法每次都会返回一个新字符串
也就是每次都会申请内存,写入数据,然后返回,用过后还要销毁
这样次数少了还没事,但几万次几十万次,肯定会很慢的
clipboard2.png
来改一下
因为他是一个字一个字的对比
所以可以在循环开始前,将字符串写到字节数组
然后在循环中直接对比字节,就相当于是逐字对比了
这样就只会申请2次内存,后续都是读取操作


改完后跑一下看看速度
clipboard3.png clipboard4.png
棒极了
分别调用两个测试10次
优化前 4156ms,优化后 297ms
效率提升了10多倍



下面放源码
识别图片_原 是原版程序
识别图片_1 是我只优化内存分配后的
识别图片_2 是我按照个人习惯完整改过的
前两个是为了证明内存分配对效率的影响
最后一个是强迫症,不改难受

回复可见
内存分配优化.e (1.07 MB, 下载次数: 166)

点评

之前随便看了下此帖,今天遇到代码优化问题,重新整理再来看一次,感谢分享   福建省福州市  发表于 2019-8-22 06:20

评分

参与人数 20好评 +17 精币 +34 收起 理由
明天自然醒 + 1 + 2 新技能已get√
1500150300 + 1 感谢分享,很给力!~
天空飞翔 + 1 + 2 新技能已get√
W390983940 + 1 + 1 感谢分享,很给力!~
小隐k + 1 + 2 共同努力,共同进步
被封禁言 + 1 支持开源~!感谢分享
易语言资源网 + 1 + 5 支持开源~!感谢分享
羽傲天 + 1 + 2 垃。。。那么帅说的就是你把?
luoran + 1 支持开源~!感谢分享
日勿日勿 + 1 支持开源~!感谢分享
已注销541904 + 1 新技能已get√
闪闪 + 1 + 1 好贴
kyo9766 + 1 + 1 支持开源~!感谢分享
镇坛道德标杆 + 1 + 3 自愿评分
malin158 + 1 + 2 就喜欢你这样的 让人很容易学会
为了爱偷铁卖 + 1 + 2 支持开源~!感谢分享
zl2017 + 1 + 2 感谢分享,很给力!~
zhuzhusha + 1 + 2 太棒了 佩服佩服 这速度飞起来了
L1yp + 1 + 2 新技能已get√
鐵憨憨 + 1 + 2 迟到的评分~~~~新技能已get√

查看全部评分


本帖被以下淘专辑推荐:

签到天数: 8 天

发表于 2023-3-1 21:14:17 | 显示全部楼层   河北省承德市
#在这里快速回复##在这里快速回复##在这里快速回复##在这里快速回复#
回复 支持 反对

使用道具 举报

签到天数: 24 天

发表于 2021-5-7 07:48:09 | 显示全部楼层   浙江省绍兴市
瞅瞅看
回复 支持 反对

使用道具 举报

结帖率:93% (75/81)
发表于 2020-6-10 21:49:46 | 显示全部楼层   福建省厦门市
感谢大佬  感谢
回复 支持 反对

使用道具 举报

结帖率:25% (1/4)
发表于 2020-3-5 23:43:02 | 显示全部楼层   河南省信阳市
计次循环没判断循环快,而且e易语言再怎么优化还是不行。想提高效率就调用c
回复 支持 反对

使用道具 举报

结帖率:92% (11/12)
发表于 2020-2-22 12:33:12 | 显示全部楼层   湖南省长沙市
谢谢LZ楼主辛苦
回复 支持 反对

使用道具 举报

结帖率:70% (14/20)

签到天数: 22 天

发表于 2020-2-16 11:39:10 | 显示全部楼层   河南省新乡市
感觉有用,非常棒,但是好难用上啊,我都写不出一个消耗CPU的程序出来
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)

签到天数: 3 天

发表于 2019-8-20 13:04:02 | 显示全部楼层   广东省东莞市
        感谢分享,很给力!~
回复 支持 反对

使用道具 举报

结帖率:45% (10/22)

签到天数: 23 天

发表于 2019-8-16 15:06:02 | 显示全部楼层   辽宁省鞍山市
学习一下吧
回复 支持 反对

使用道具 举报

结帖率:100% (25/25)

签到天数: 2 天

发表于 2019-8-10 18:07:07 | 显示全部楼层   湖南省岳阳市
支持开源~!感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (3/3)

签到天数: 25 天

发表于 2019-8-8 08:56:13 | 显示全部楼层   广东省广州市
可以的,这个思路可以有启发
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表