人气 219

[游戏程序] [转帖]脚本引擎速度评测—谁是最快的脚本引擎?lua么,让我来为大家揭晓 ... [复制链接]

九艺网 2017-3-10 17:02:15

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
呵呵,最近的空闲时间,我在对以前策划的脚本引擎架构的方案进行实施,编写完脚本引擎核心的原型系统。在互联网搜了搜最快的脚本引擎,在国内众口一词的都说Lua最快,其实是不然的。
让我们用事实来说话吧:
下面的测试全部采用 QueryPerformanceCounter 高精度计数【Lua这个家伙不支持int64让我头疼了一阵,还好我想到了解决的方法】。
我这里测试指令:只简单测试加法运算;总共测试2017个加法指令与常数直接相加,最后的结果应该为:300*2017=605100
另外我还将测试子程序调用的速度。
没有比较是不行的,我用机器语言直接运行的效率和脚本相比:
下面是加法指令直接运行的速度:
x86汇编:
  ;计时开始
  MOV EBX, 300  BB2C010000
  ADD EBX, 300  81C32C010000
  ..... --- 总计 2017 次
  ADD EBX, 300  81C32C010000
  ;计时结束

结果运行时间:60
Lua Script 脚本:
  (计时开始)
  local count = 300
  count = count + 300
    ..... (总计 2017 次)
  count = count + 300
  (计时结束)
【Lua5.0.2】运行时间:110
【Lua5.1 】 运行时间: 120

EUPHORIA 加法指令顺序执行效率测试脚本:
  --计时开始
    count = 300
    count +=300
    ..... --- 总计 2017 次
    count +=300
  --计时结束

结果运行时间:74
我写的 TurboScript 脚本:
  (计时开始)
  300
  300 +
    ..... (总计 2017 次)
  300 +
  (计时结束)

结果运行时间:87 【比汇编慢0.31倍; 如果当我进一步取消CPUStates(判断终止标志位)测试,运行时间居然和汇编差不多了:61!嘿嘿。】

子过程调用的速度比较:
x86 汇编 子过程调用效率测试脚本:
function add(a,b: integer): integer;
asm
  mov EAX, a
  add EAX, b
end;
--计时开始
  asm
    mOV EAX, 300
    MOV EDX, 300    CALL ADD
    ..... (总计 2017 次)
    MOV EDX, 300    CALL ADD
--计时结束
结果运行时间:126
Lua Script 脚本:
function iAdd(a, b)
  return a+b
end function
  (计时开始)
  local count = 300
  count = iAdd(count, 300)
    ..... (总计 2017 次)
  count = iAdd(count, 300)
  (计时结束)
【Lua5.0.2】运行时间:1270
【Lua5.1 】  运行时间:1820

EUPHORIA 子过程调用效率测试脚本:
function iAdd(integer a, integer b)
  return a+b
end function
--计时开始
count = 300
count = iAdd(count, 300)
..... --- 总计 2017 次
count = iAdd(count, 300)
--计时结束

结果运行时间:522 【比汇编慢了近0.759倍,比TurboScript 近调用慢近0.70倍】

TurboScript 子过程近调用效率测试
: Add +;
--计时开始
300
300 Add
..... (总计 2017 次)
300 Add
--计时结束
结果运行时间:157【只比汇编慢0.197倍,改用字节代码流后速度略有损失,现在是运行时间:169】
TurboScript 子过程模块之间的VM DLL远调用效率
: Add external 'test'; //该函数在另一文件中。
--计时开始
300
300 Add
..... (总计 2017 次)
300 Add
--计时结束
启用按需加载技术的结果运行时间:1082【不稳定徘徊在1082-8828】
使用的是按需加载技术,也就是仅当该函数被调用的时候才加载,然后加上Cache技术,后面的调用就在内存中处理。
时间远远长于其它,是因为加载文件耗去了绝大部分时间
不启用按需加载技术,而是预先加载模块:
结果运行时间:202  
回复

使用道具 举报

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

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-4-26 16:01 , Processed in 0.062316 second(s), 23 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.