脚本开发,脚本学习,辅助软件
【腾讯云】新用户专属大礼包低至1折【阿里云】云产品通用代金券2000元【阿里云】云小站优惠返现【阿里云】企业级1折特惠【阿里云】3年低至3折
查看: 7|回复: 0

论优化的小技巧

[复制链接]

22

主题

22

帖子

128

积分

襁褓

Rank: 1

积分
128
发表于 2020-5-16 13:08:39 | 显示全部楼层 |阅读模式


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

拿过代码以后,先大体猜一下哪里耗时比较长,然后再设法优化

他的代码只用了核心库,核心库问题不大,那么如果有问题也大概率出在他的用法上


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

例如 频繁内存分配大量计算

一般这就是导致效率低的罪魁祸首


首先是重定义数组,3次重定义都没有必要,不过这里应该对总耗时影响不大 pass

其次是分割文本,次数也不多,而且可根据后面的判断得出,只会分割成2、3份,应该也不会影响太大 pass


最后就是 取文本中间 了,他的 取文本中间 在两层循环中

而且根据上下文来看,这里就是识别的核心

取文本中间 单次耗时应该很少,但这里会调用 非常非常多次

所以我猜大部分耗时都在这里,来尝试优化一下


怎么优化呢

取文本中间 本身是个很简单的操作,优化空间不大,我们从侧面入手

取文本中间,会返回取到的文本,这里也就是按字符串的顺序一个字一个字返回

这里的问题不在于这个方法的耗时,而是在返回时的内存分配

前面说过了,内存分配对效率影响很大,这个方法每次都会返回一个新字符串

也就是每次都会申请内存,写入数据,然后返回,用过后还要销毁

这样次数少了还没事,但几万次几十万次,肯定会很慢的

J}Q79J()]YRKM2F7@@REHGQ.png

来改一下

因为他是一个字一个字的对比

所以可以在循环开始前,将字符串写到字节数组

然后在循环中直接对比字节,就相当于是逐字对比了

这样就只会申请2次内存,后续都是读取操作


改完后跑一下看看速度

_CC0JOQWKVF$W(IK$%@B.png 棒极了

分别调用两个测试10次

优化前 4156ms,优化后 297ms

效率提升了10多倍


PS:优化除了减少内存分配,还有对持久或常用数据做缓存,也就是可以把字库最终处理后的数据放到全局变量,只处理一次,这样还能快不少,各位自己试试吧

下载链接:

https://t00y.com/file/20110282-443667210








上一篇:简单的仓库管理软件
下一篇:易语言获取域名分类大全
3Q4T网,编程学习交流基地。
回复

使用道具 举报

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

本版积分规则

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