吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 552|回复: 6
上一主题 下一主题
收起左侧

[其他求助] 易语言优化提速或多线程求助

[复制链接]
跳转到指定楼层
楼主
sugarshy 发表于 2024-3-3 19:33 回帖奖励
50吾爱币




这两部分怎么优化好, 主要是想优化速度

最佳答案

查看完整内容

[md]这一段循环: ![原始代码改写](https://imgsrc.baidu.com/forum/pic/item/b2de9c82d158ccbf6255d5005fd8bc3eb135411a.png) 本质上是寻找对应字符从右侧开始数起时的位置,不存在返回 `0`。 例如下述代码能通过检查: ```vb 检查 (测试代码 (“123123123”, “1”) = “2”) 检查 (测试代码 (“123123123”, “9”) = “0”) ``` 此外因为查找的字符已知都是单个字符,可以提前替换为对应的字节(或利用 ` ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

沙发
爱飞的猫 发表于 2024-3-3 19:33
本帖最后由 爱飞的猫 于 2024-3-4 05:44 编辑

这一段循环:

原始代码改写

本质上是寻找对应字符从右侧开始数起时的位置,不存在返回 0

例如下述代码能通过检查:

检查 (测试代码 (“123123123”, “1”) = “2”)
检查 (测试代码 (“123123123”, “9”) = “0”)

此外因为查找的字符已知都是单个字符,可以提前替换为对应的字节(或利用 取代码 (“1”, ) 等方法获取)来计算,并返回整数型,在需要展示到编辑框时再转换。

利用 C 运行时的 strrchr 可以快速找到对应的位置:

使用方法也和之前没有太大区别:

检查 (测试代码_修改 (“123123123”, #键1) = 2)
检查 (测试代码_修改 (“123123123”, #键9) = 0)

最后,若是你需要对多个字符进行检测,可以提前计算码表,然后直接访问码表:

码表修改方案

使用的时候直接将字符码作为索引传递即可:

.版本 2

.局部变量 码表, 整数型, , "0"

' 相同输入的字符串,只需要计算一次
测试代码_修改2 (码表, “123123123”)

检查 (码表 [49] = 2)  ' #键1
检查 (码表 [57] = 0)  ' #键9

最后对正确性和性能进行测试:

最后的性能测试

性能测试结果(每个方法都跑 1000 × 100 × 2 次):

* 测试代码: 耗时 547ms
* 测试代码_修改: 耗时 156ms
* 测试代码_修改2 (码表访问): 耗时 0ms

因为你的 输出_out0.内容 在计算时没有变过,提前计算一次码表然后在需要时进行快速查表应该是最快的方法,也是典型的用内存空间换时间算法。


回到你的第一张图,对 输入数组 的处理也可以按照类似的思路来,不要使用字符串进行数据处理,而是储存对应的数值。

可以使用 sscanf 快速将数据解构到整数型数组;另外可以添加而非删除:

因为提前利用 数组排序 对解析出来的五个数字进行排序,检查数组是否存在 就可以利用二分法来快速查找了(不过如果只有 5 项,或许效率不如一个一个排查…)。

最后编写测试案例:


本文的完整易语言代码参考: 52pj-tid-1896115.7z

最后,如果没有必要,不需要太频繁更新窗口控件,尤其是循环内。窗口控件数据的获取和更新会带来比较大的延时。


免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
__秦始皇__ + 1 + 1 热心回复!
sugarshy + 1 + 1 热心回复!

查看全部评分

3#
爱飞的猫 发表于 2024-3-3 22:06

建议将代码片段(文字或源文件)发出来,方便分析、查看。例如你的测试数据就比较难复现出来。

如果你希望直接贴出代码的文字,请使用代码框方便复制。

参考:

如果你希望提交源码文件但是源码含有不希望共享的内容,可以提供一个不含私有内容的“最小可重复示例”(即只包含你需要询问的内容的代码)供坛友分析。

4#
scncrenyong 发表于 2024-3-3 23:08
红框1代码的意思,应该是,取字符串中最后一个是1的位置右边文本长度吧!
可以用倒找文本命令。
其他的没看了
5#
b0y 发表于 2024-3-3 23:18
- -你这循环里不停的对控件赋值  肯定慢啊
6#
你好,再见 发表于 2024-3-4 08:04
用计次循环呀,设定一个变量i,把你的1234换成i
另外可以用黑月编译器
7#
 楼主| sugarshy 发表于 2024-3-9 22:47 |楼主
爱飞的猫 发表于 2024-3-3 19:33
[md]这一段循环:

![原始代码改写](https://imgsrc.baidu.com/forum/pic/item/b2de9c82d158ccbf6255d500 ...

非常感谢你的回复,我学习一下看看
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-14 10:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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