开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 625|回复: 15
收起左侧

[易语言纯源码] 不知为啥 短文本拼接用加号更快 【文本a + 文本b + 文.....

[复制链接]
结帖率:60% (3/5)
发表于 5 天前 | 显示全部楼层 |阅读模式   广东省深圳市
分享源码
界面截图: -
是否带模块: -
备注说明: -
本帖最后由 易造轮 于 2026-7-7 04:17 编辑

优化一通存粹做了个负优化
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
子程序名返回值类型公开备 注
__启动窗口_创建完毕  

子程序名返回值类型公开备 注
短文本拼接文本型 
参数名类 型参考可空数组备 注
文本a文本型
文本b文本型
文本c文本型
分隔符文本型
变量名类 型静态数组备 注
lenA整数型 
lenSep整数型 
lenB整数型 
lenC整数型 
总长度整数型 
p缓冲区整数型 
临时文本文本型 
lenSep = 取文本长度 (分隔符)
lenA = 取文本长度 (文本a)
lenB = 取文本长度 (文本b)
lenC = 取文本长度 (文本c)
总长度 = lenA + lenB + lenC + lenSep
临时文本 = 取空白文本 (总长度)
p缓冲区 = 取变量数据指针_ASM (临时文本)
' 拼接
RtlMoveMemory (p缓冲区, 取变量数据指针_ASM (文本a), lenA)
RtlMoveMemory (p缓冲区 + lenA, 取变量数据指针_ASM (分隔符), lenSep)
RtlMoveMemory (p缓冲区 + lenA + lenSep, 取变量数据指针_ASM (文本b), lenB)
RtlMoveMemory (p缓冲区 + lenA + lenSep + lenB, 取变量数据指针_ASM (分隔符), lenSep)
RtlMoveMemory (p缓冲区 + lenA + lenSep + lenB + lenSep, 取变量数据指针_ASM (文本c), lenC)
返回 (零拷贝返回局文本_ (临时文本))
子程序名返回值类型公开备 注
取变量数据指针_ASM整数型 同取变量数据地址();返回指定变量的数据地址(内存指针),当数据类型为字节集时会多出8个字节(前4个字节为标志,后4字节标明字节集长度)。注:取字节集变量数据指针 后 需要+8
参数名类 型参考可空数组备 注
参数_变量通用型
置入代码 ({ 139, 69, 8, 139, 0, 201, 194, 4, 0 })
返回 (0)
子程序名返回值类型公开备 注
零拷贝返回局文本_文本型 
参数名类 型参考可空数组备 注
要返回的文本文本型
置入代码 ({ 139, 77, 8, 139, 1, 199, 1, 0, 0, 0, 0, 201, 194, 4, 0 })
返回 (“”)
子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
结果文本文本型 
t1整数型 
文本a文本型 
文本b文本型 
文本c文本型 
t1 = 取启动时间 ()
计次循环首 (10000000, )
文本a = “order”
文本b = “10086”
文本c = “ccc”
结果文本 = 文本a + “_” + 文本b + “_” + 文本c
计次循环尾 ()
信息框 (到文本 (取启动时间 () - t1), 0, , )
子程序名返回值类型公开备 注
_按钮2_被单击  
变量名类 型静态数组备 注
结果文本文本型 
t1整数型 
文本a文本型 
文本b文本型 
文本c文本型 
t1 = 取启动时间 ()
计次循环首 (10000000, )
文本a = “order”
文本b = “10086”
文本c = “ccc”
结果文本 = 短文本拼接 (文本a, 文本b, 文本c, “_”)
计次循环尾 ()
信息框 (到文本 (取启动时间 () - t1), 0, , )
DLL命令名返回值类型公开备 注
RtlMoveMemory 移动内存
DLL库文件名:
ntdll
在DLL库中对应命令名:
RtlMoveMemory
参数名类 型传址数组备 注
目标地址整数型Dest 要移动到的目标地址
原地址整数型Src 被移动的原地址
被复制的大小整数型length 被移动原地址的长度

点评

易语言文本拼接是 先统计 长度 然后申请内存 然后 复制 然后短文本 执行的代码短 简单movsb 等指令 你写的 时间都浪费在 RtlMoveMemory 寻址上了   广西壮族自治区南宁市  发表于 3 天前
易语言变量文本拼接是重新生成了新的内存地址,目前的是始终如一的使用一个内存地址   江西省赣州市  发表于 4 天前

评分

参与人数 1好评 +1 精币 +4 收起 理由
华庭大哥 + 1 + 4 支持开源~!感谢分享

查看全部评分


签到天数: 12 天

发表于 昨天 09:37 | 显示全部楼层   浙江省宁波市
感谢分享,支持开源!!!
回复 支持 反对

使用道具 举报

签到天数: 12 天

发表于 前天 09:36 | 显示全部楼层   浙江省宁波市
感谢分享,支持开源!!!
回复 支持 反对

使用道具 举报

结帖率:75% (3/4)

签到天数: 6 天

发表于 3 天前 | 显示全部楼层   福建省福州市
  
子程序名返回值类型公开备 注
转换模块_文本数组累加_内存编辑文本型 网友 易语飞扬写的   、  迄今为止最快 推荐
参数名类 型参考可空数组备 注
参数_文本数组文本型
参数_分隔符文本型
变量名类 型静态数组备 注
局变_分隔符长度整数型 
局变_长度组整数型0
局变_总长度整数型 
局变_总文本文本型 
局变_总指针  
局变_指针当前位置  
局变_I  
如果 (是否为空 (参数_分隔符))
参数_分隔符 = #换行符



局变_分隔符长度 = 取文本长度 (参数_分隔符)
重定义数组 (局变_长度组, 假, 取数组成员数 (参数_文本数组))
计次循环首 (取数组成员数 (参数_文本数组), 局变_I)
局变_长度组 [局变_I]取文本长度 (参数_文本数组 [局变_I])
局变_总长度 = 局变_总长度 + 局变_长度组 [局变_I]
计次循环尾 ()
' 总长度 = 所有文本长度之和 + 分隔符长度 × (成员数-1)
如果真 (参数_分隔符 ≠ “”)
局变_总长度 = 局变_总长度 + 局变_分隔符长度 (取数组成员数 (参数_文本数组) - 1)

局变_总文本 = 取空白文本 (局变_总长度)
局变_总指针 = 取变量数据地址 (局变_总文本)
局变_指针当前位置 = 局变_总指针
计次循环首 (取数组成员数 (参数_文本数组), 局变_I)
RtlMoveMemory_内存拷贝 (局变_指针当前位置, 参数_文本数组 [局变_I], 局变_长度组 [局变_I])
局变_指针当前位置 = 局变_指针当前位置 + 局变_长度组 [局变_I]
如果真 (局变_I < 取数组成员数 (参数_文本数组) 参数_分隔符 ≠ “”)
RtlMoveMemory_内存拷贝 (局变_指针当前位置, 参数_分隔符, 局变_分隔符长度)
局变_指针当前位置 = 局变_指针当前位置 + 局变_分隔符长度

计次循环尾 ()
返回 (局变_总文本)
DLL命令名返回值类型公开备 注
RtlMoveMemory_内存拷贝整数型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
RtlMoveMemory
参数名类 型传址数组备 注
Destination整数型
Source文本型
Length整数型



i支持库列表   支持库注释   
spec特殊功能支持库



  
子程序名返回值类型公开备 注
转换模块_文本数组累加_字节集对象文本型 比较快的了  第二快
参数名类 型参考可空数组备 注
参数_文本数组文本型
参数_分隔符文本型
变量名类 型静态数组备 注
局变_字节集快速字节集对象 
ls文本型 
如果 (是否为空 (参数_分隔符))
参数_分隔符 = #换行符


' 用它自己传入的 参数_分隔符

. ' 计次循环首 (取数组成员数 (参数_文本数组), n1)
' 局变_字节集.添加 (到字节集 (参数_文本数组 [n1] + 参数_分隔符))
. ' 计次循环尾 ()
' ls = 到文本 (局变_字节集.取字节集 (, 局变_字节集.取长度 () - 取文本长度 (参数_分隔符)))
' ===============================================
局变_字节集.置字节集 (参数_文本数组)
局变_字节集.替换子字节集 ({ 0 }, 到字节集 (参数_分隔符), , )
ls = 到文本 (局变_字节集.取字节集 (, 局变_字节集.取长度 ()取文本长度 (参数_分隔符)))
返回 (ls)


i支持库列表   支持库注释   
commobj通用对象支持库



你试试看  这两个      另外你测试也有问题  ,直接  弄两个随机文本数组,累加不就好了     输出一个文本型   ,也方便测试比较
回复 支持 反对

使用道具 举报

结帖率:96% (498/517)

签到天数: 9 天

发表于 4 天前 | 显示全部楼层   内蒙古自治区乌海市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 11 天

发表于 4 天前 | 显示全部楼层   山东省淄博市
感谢分享
回复 支持 反对

使用道具 举报

签到天数: 11 天

发表于 4 天前 | 显示全部楼层   浙江省金华市
RtlMoveMemory  换copy
回复 支持 反对

使用道具 举报

签到天数: 10 天

发表于 5 天前 | 显示全部楼层   江苏省连云港市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:70% (14/20)

签到天数: 12 天

发表于 5 天前 | 显示全部楼层   河南省驻马店市
哈哈我也来了
回复 支持 反对

使用道具 举报

结帖率:100% (36/36)

签到天数: 12 天

发表于 5 天前 | 显示全部楼层   广东省惠州市
youximeng88 发表于 2026-7-7 10:21
你循环那么多次,没把全部内容合在一起,循环多少次都是一次的内容,所以用数组比较好,然后用精易模块的  ...

4750毫秒,还是太慢了.列表框.100万行*4~5列.打开软件.直接就秒赋完值了!.https://bbs.ijingyi.com/thread-14877855-1-1.html
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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