开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 182|回复: 3
收起左侧

[易语言] 代码运行效率极低,求助

[复制链接]
结帖率:100% (2/2)
发表于 2024-10-16 22:20:33 | 显示全部楼层 |阅读模式   河北省石家庄市
目的:处理游戏日志文本,提取出指定项目(时间、SteamID、昵称/编号、命令描述、命令文本)
日志文本示例:(仅展示了部分典型文本结构,还可能有其他文本结构,但是开头的日期是肯定有的,我在代码中已经做了处理,如正则匹配不到则只取时间和时间后面的文本)

2024.10.02-11.02.37: Game version: 0.9.543.81099
2024.10.02-11.04.40: '76561199125779714:精致生活服务员(1)' Command: 'listplayers true'
2024.10.02-11.04.51: '76561199125779714:精致生活服务员(1)' Command: 'ListSpawnedVehicles true'

2024.10.02-11.29.32: '76561198853518897:Dannmo(10)' Used map click teleport to player: '76561199770495755:3446924117(136)' Location: X=350994.000 Y=-517909.000 Z=8095.310
2024.10.14-14.20.21: Custom Zones updated by {小小 (9, 76561198397844696)}


存在问题的代码片段:

  
开始事务 (局_数据库句柄)
临时数值 = 到整数 (时间_到时间戳 (取现行时间 (), 假, ))
计次循环首 (取数组成员数 (局_文本数组), 局_计次3)
如果真 (到整数 (局_文本数组 [局_计次3]) ≠ 0 文本_寻找文本 (局_文本数组 [局_计次3], “: Game version: ”, , ) = -1)
' 调试输出 (局_文本数组 [局_计次3])
正则.创建 (“(\d{4}\.\d{2}\.\d{2}-\d{2}\.\d{2}\.\d{2}): '(\d{17}):([^']+)' ([^:]+): (.+)”, 局_文本数组 [局_计次3], , , , )
判断 (正则.取匹配数量 () ≠ 0)
局_原文时间 = 正则.取子匹配文本 (1, 1, )
局_转换后时间 = 日志时间转换 (局_原文时间)
局_SteamID = 正则.取子匹配文本 (1, 2, )
局_游戏名编号 = 正则.取子匹配文本 (1, 3, )
' 局_命令类型 = 读配置项 (取运行目录 () + “/日志关键字.ini”, “admin”, 正则.取子匹配文本 (1, 4, ), 正则.取子匹配文本 (1, 4, ))
局_原文 = 文本_替换 (正则.取子匹配文本 (1, 5, ), , , , “'”, “”, , , , , , , , )
局_译文 = admin_命令翻译 (正则.取子匹配文本 (1, 4, ), 局_原文)



正则.创建 (“(\d{4}\.\d{2}\.\d{2}-\d{2}\.\d{2}\.\d{2}): (.+)”, 局_文本数组 [局_计次3], , , , )
局_原文时间 = 正则.取子匹配文本 (1, 1, )
局_转换后时间 = 日志时间转换 (局_原文时间)
局_原文 = 文本_替换 (正则.取子匹配文本 (1, 2, ), , , , “'”, “”, , , , , , , , )
局_译文 = admin_命令翻译 (“其他”, 局_原文)

局_SQL语句 = “INSERT INTO log_admin_log (server_txt, file_name, log_time, real_time, SteamID, GameName_number, log_txt, real_txt, input_time) VALUES ('” + 局_目录数组 [局_计次]“','” + 局_文件数组 [局_计次1]“','” + 局_原文时间 + “','” + 局_转换后时间 + “','” + 局_SteamID + “','” + 局_游戏名编号 + “','” + 正则.取子匹配文本 (1, 4, )“:” + 局_原文 + “','” + 局_译文 + “',now())”
' 调试输出 (局_SQL语句)
如果真 (执行SQL语句 (局_数据库句柄, 局_SQL语句))
调试输出 (局_文本数组 [局_计次3])
调试输出 (“语句失败:” + 局_SQL语句)
跳出循环 ()


如果真 (局_计次3 = 取数组成员数 (局_文本数组))
调试输出 (保存事务 (局_数据库句柄))

计次循环尾 ()
调试输出 (“日志文件行数:”到文本 (取数组成员数 (局_文本数组)) + “,正则/语句耗时:”到文本 (到整数 (时间_到时间戳 (取现行时间 (), 假, )) - 临时数值)“毫秒”)


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


问题:单个日志文件有两千行左右,用上面的代码处理单个文件要耗时近1分钟,完全没有效率可言,希望有大佬帮忙优化代码或者提出新思路尽可能提升效率。


补充内容 (2024-10-17 10:45):
使用自带正则支持库也试过了,时间缩短到45秒左右,也还是太慢了,有几百个日志文件要处理

补充内容 (2024-10-17 11:35):
调试发现问题是由执行SQL导致的,经过优化,使用INSERT语句配合快速文本对象一次插入2000行数据,现在处理2059行数据缩减到2秒左右,还有优化空间吗

回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳
结帖率:100% (2/2)

签到天数: 3 天

 楼主| 发表于 2024-10-16 22:27:27 | 显示全部楼层   河北省石家庄市
QQ20241016-222659.png
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 3 天

 楼主| 发表于 2024-10-17 13:05:07 | 显示全部楼层   河北省石家庄市
回复 支持 反对

使用道具 举报

结帖率:50% (1/2)

签到天数: 8 天

发表于 2024-10-17 17:16:42 | 显示全部楼层   江苏省徐州市
确实慢!
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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