开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

12
返回列表 发新帖
楼主: 嫂子
收起左侧

[易源码分享] [闲的蛋疼]易语言版28w结构化数据读取优化到1100ms

[复制链接]
结帖率:80% (4/5)
发表于 前天 02:32 | 显示全部楼层   广西壮族自治区柳州市
睡醒一觉,上汇编给你优化一下,
QQ20260507-023006.jpg

  
子程序名返回值类型公开备 注
_按钮1_被单击  
变量名类 型静态数组备 注
time整数型 
TmpBin字节型0
dat字节集 
pDat整数型 
Count整数型 
_Pos整数型 
_pStruct整数型 
time = 取启动时间 ()
dat = 读入文件 (“C:\Users\Administrator\Desktop\xx.dat”)
_pStruct = 1
Count = 取字节集长度 (dat) \ 28
重定义数组 (TmpBin, 假, 取字节集长度 (dat) × 3)
计次循环首 (Count, )
pDat = Pint (dat [_pStruct])
_Pos = _Pos + 整数转文本 (TmpBin [Inc (_Pos)], _GetI2 (pDat + 4))  ' V1
TmpBin [_Pos] = 9
_Pos = _Pos + 整数转文本 (TmpBin [Inc (_Pos)], _GetI2 (pDat + 6))  ' V2
TmpBin [_Pos] = 9
_Pos = _Pos + 整数转文本 (TmpBin [Inc (_Pos)], _GetI2 (pDat + 8))  ' V3
TmpBin [_Pos] = 9
_Pos = _Pos + 整数转文本 (TmpBin [Inc (_Pos)], _GetI2 (pDat + 10))  ' V4
TmpBin [_Pos] = 9
_Pos = _Pos + 整数转文本 (TmpBin [Inc (_Pos)], _GetI4 (pDat + 12))  ' V5
TmpBin [_Pos] = 9
_Pos = _Pos + 整数转文本 (TmpBin [Inc (_Pos)], _GetI4 (pDat + 16))  ' V6
TmpBin [_Pos] = 9
_Pos = _Pos + 整数转文本 (TmpBin [Inc (_Pos)], _GetI4 (pDat + 20))  ' V7
TmpBin [_Pos] = 9
_Pos = _Pos + 整数转文本 (TmpBin [Inc (_Pos)], _GetI4 (pDat + 24))  ' V8
TmpBin [_Pos] = 13
TmpBin [Inc (_Pos)] = 10
_Pos = Inc (_Pos)
_pStruct = _pStruct + 28
计次循环尾 ()
重定义数组 (TmpBin, 真, _Pos)
写到文件 (“C:\Users\Administrator\Desktop\xx.txt”, 到字节集 (TmpBin))
输出调试文本 (“耗时: ”到文本 (取启动时间 () - time)“ 毫秒”)
子程序名返回值类型公开备 注
整数转文本整数型 文本长度
参数名类 型参考可空数组备 注
缓冲区字节型
_整数整数型
' __asm{
' ; sub esp,4
' ; push ecx
' ; push esi
' ; push edi
' ; mov ecx,10
' ; xor edi,edi
' ; mov dword ptr[ebp-4],edi
' ; mov esi,dword ptr[ebp+8]
' ; mov eax,dword ptr[ebp+0ch]
' ; mov edx,eax
' ; and edx,80000000h
' ; test edx,edx
' ; je label1
' ; mov byte ptr[esi],'-'
' ; inc esi
' ; mov dword ptr[ebp-4],1
' ; imul eax,-1
' ; label1:
' ; xor edx,edx
' ; div ecx
' ; add edx,48
' ; dec esp
' ; mov byte ptr[esp],dl
' ; inc edi
' ; test eax,eax
' ; jne label1
' ; mov eax,edi
' ; add eax,dword ptr[ebp-4]
' ; label2:
' ; test edi,edi
' ; je label3
' ; dec edi
' ; mov dl,byte ptr[esp+edi]
' ; mov byte ptr[esi+edi],dl
' ; jmp label2
' ; label3:
' ; inc eax
' ; pop edi
' ; pop esi
' ; pop ecx
' ; leave
' ; ret 8
置入代码 ({ 131, 236, 4, 81, 86, 87, 185, 10, 0, 0, 0, 49, 255, 137, 125, 252, 139, 117, 8, 139, 69, 12, 137, 194, 129, 226, 0, 0, 0, 128, 133, 210, 116, 14, 198, 6, 45, 70, 199, 69, 252, 1, 0, 0, 0, 107, 192, 255, 49, 210, 247, 241, 131, 194, 48, 76, 136, 20, 36, 71, 133, 192, 117, 240, 137, 248, 3, 69, 252, 133, 255, 116, 9, 79, 138, 20, 60, 136, 20, 62, 235, 243, 64, 95, 94, 89, 201, 194, 8, 0 })
' }
返回 (0)
子程序名返回值类型公开备 注
Inc整数型 
参数名类 型参考可空数组备 注
Integer整数型
' __asm{
' ; mov eax,dword ptr[ebp+8]
' ; inc eax
' ; leave
' ; ret 4
置入代码 ({ 139, 69, 8, 64, 201, 194, 4, 0 })
' }
返回 (0)
子程序名返回值类型公开备 注
Pint整数型 
参数名类 型参考可空数组备 注
Value字节型
' __asm{
' ; mov eax,dword ptr[ebp+8]
' ; leave
' ; ret 4
置入代码 ({ 139, 69, 8, 201, 194, 4, 0 })
' }
返回 (0)
子程序名返回值类型公开备 注
_GetI2整数型 
参数名类 型参考可空数组备 注
Pointer整数型
' __asm{
' ; mov eax,dword ptr[ebp+8]
' ; movzx eax,word ptr[eax]
' ; leave
' ; ret 4
置入代码 ({ 139, 69, 8, 15, 183, 0, 201, 194, 4, 0 })
' }
返回 (0)
子程序名返回值类型公开备 注
_GetI4整数型 
参数名类 型参考可空数组备 注
Pointer整数型
' __asm{
' ; mov eax,dword ptr[ebp+8]
' ; mov eax,dword ptr[eax]
' ; leave
' ; ret 4
置入代码 ({ 139, 69, 8, 139, 0, 201, 194, 4, 0 })
' }
返回 (0)

回复 支持 反对

使用道具 举报

结帖率:100% (9/9)

签到天数: 9 天

发表于 前天 00:54 | 显示全部楼层   湖南省郴州市
感谢分享,学习看看
回复 支持 反对

使用道具 举报

签到天数: 8 天

 楼主| 发表于 3 天前 | 显示全部楼层   浙江省金华市
dnxl 发表于 2026-5-6 21:17
这写法按每4字节转成文本占用2-12字节,8M的文件处理完最大可能会生成24M的文件。这1M缓存能存的下么 ...

1M缓存只是扩容大小。不是最终大小。
回复 支持 反对

使用道具 举报

结帖率:80% (4/5)

签到天数: 9 天

发表于 3 天前 | 显示全部楼层   广西壮族自治区柳州市
嫂子 发表于 2026-5-6 20:49
8M 原贴内有文件

这写法按每4字节转成文本占用2-12字节,8M的文件处理完最大可能会生成24M的文件。这1M缓存能存的下么
回复 支持 反对

使用道具 举报

签到天数: 8 天

 楼主| 发表于 3 天前 | 显示全部楼层   浙江省金华市
dnxl 发表于 2026-5-6 20:46
多大文件?
看缓存1M,最后输出的文件也没多大。那个dat文件应该不过300KB吧,就这点数据要1秒?
...

8M 原贴内有文件
回复 支持 反对

使用道具 举报

结帖率:80% (4/5)

签到天数: 9 天

发表于 3 天前 | 显示全部楼层   广西壮族自治区柳州市
多大文件?
看缓存1M,最后输出的文件也没多大。那个dat文件应该不过300KB吧,就这点数据要1秒?
回复 支持 反对

使用道具 举报

结帖率:80% (4/5)
发表于 3 天前 | 显示全部楼层   山东省潍坊市
已经顶贴,感谢您对论坛的支持!
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 7 天

发表于 3 天前 | 显示全部楼层   浙江省温州市
这个话题 虽然我不是很懂 但也支持一下楼主 继续加油
回复 支持 0 反对 1

使用道具 举报

签到天数: 8 天

 楼主| 发表于 3 天前 | 显示全部楼层   浙江省金华市
题外话  Delphi版本 也可以不拷贝内存。使用这种原始读取 不过因为拷贝总共才2ms 就没有优化的必要了。拷贝后的可读性更佳
回复 支持 反对

使用道具 举报

签到天数: 8 天

 楼主| 发表于 3 天前 | 显示全部楼层   浙江省金华市
位与 (v1, 65535)  这个是短整转无符号端整 。这个费时花了接近500ms。如果原生支持 估计可以到700ms左右
回复 支持 0 反对 1

使用道具 举报

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

本版积分规则 致发广告者

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

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

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