[转帖]脚本引擎速度评测—谁是最快的脚本引擎?lua么,让我来为大家揭晓
<strong><br/><br/></strong>呵呵,最近的空闲时间,我在对以前策划的脚本引擎架构的方案进行实施,编写完脚本引擎核心的原型系统。在互联网搜了搜最快的脚本引擎,在国内众口一词的都说Lua最快,其实是不然的。 <p></p><p>让我们用事实来说话吧:</p><p>下面的测试全部采用 QueryPerformanceCounter 高精度计数【Lua这个家伙不支持int64让我头疼了一阵,还好我想到了解决的方法】。</p><p>我这里测试指令:只简单测试加法运算;总共测试2017个加法指令与常数直接相加,最后的结果应该为:300*2017=605100</p><p>另外我还将测试子程序调用的速度。</p><p>没有比较是不行的,我用机器语言直接运行的效率和脚本相比:</p><p>下面是加法指令直接运行的速度:</p><p>x86汇编:<br/> ;计时开始<br/> MOV EBX, 300 BB2C010000<br/> ADD EBX, 300 81C32C010000<br/> ..... --- 总计 2017 次<br/> ADD EBX, 300 81C32C010000<br/> ;计时结束<br/> <br/>结果运行时间:60</p><p>Lua Script 脚本:<br/> (计时开始)<br/> local count = 300<br/> count = count + 300<br/> ..... (总计 2017 次)<br/> count = count + 300<br/> (计时结束)</p><p>【Lua5.0.2】运行时间:110 <br/>【Lua5.1 】 运行时间: 120</p><p><br/>EUPHORIA 加法指令顺序执行效率测试脚本:<br/> --计时开始<br/> count = 300<br/> count +=300<br/> ..... --- 总计 2017 次<br/> count +=300<br/> --计时结束<br/> <br/>结果运行时间:74 </p><p>我写的 TurboScript 脚本:<br/> (计时开始)<br/> 300<br/> 300 +<br/> ..... (总计 2017 次)<br/> 300 +<br/> (计时结束)<br/> <br/>结果运行时间:87 【比汇编慢0.31倍; 如果当我进一步取消CPUStates(判断终止标志位)测试,运行时间居然和汇编差不多了:61!嘿嘿。】</p><p><br/>子过程调用的速度比较:</p><p>x86 汇编 子过程调用效率测试脚本:<br/>function add(a,b: integer): integer;<br/>asm<br/> mov EAX, a<br/> add EAX, b<br/>end;<br/>--计时开始<br/> asm<br/> mOV EAX, 300<br/> MOV EDX, 300 CALL ADD<br/> ..... (总计 2017 次)<br/> MOV EDX, 300 CALL ADD<br/>--计时结束<br/>结果运行时间:126</p><p>Lua Script 脚本:<br/>function iAdd(a, b)<br/> return a+b<br/>end function<br/> (计时开始)<br/> local count = 300<br/> count = iAdd(count, 300)<br/> ..... (总计 2017 次)<br/> count = iAdd(count, 300)<br/> (计时结束)</p><p>【Lua5.0.2】运行时间:1270 <br/>【Lua5.1 】 运行时间:1820</p><p><br/>EUPHORIA 子过程调用效率测试脚本:<br/>function iAdd(integer a, integer b)<br/> return a+b<br/>end function<br/>--计时开始<br/>count = 300<br/>count = iAdd(count, 300)<br/>..... --- 总计 2017 次<br/>count = iAdd(count, 300)<br/>--计时结束<br/> <br/>结果运行时间:522 【比汇编慢了近0.759倍,比TurboScript 近调用慢近0.70倍】</p><p><br/>TurboScript 子过程近调用效率测试<br/>: Add +;<br/>--计时开始<br/>300<br/>300 Add<br/>..... (总计 2017 次)<br/>300 Add<br/>--计时结束<br/>结果运行时间:157【只比汇编慢0.197倍,改用字节代码流后速度略有损失,现在是运行时间:169】</p><p>TurboScript 子过程模块之间的VM DLL远调用效率<br/>: Add external 'test'; //该函数在另一文件中。<br/>--计时开始<br/>300<br/>300 Add<br/>..... (总计 2017 次)<br/>300 Add<br/>--计时结束</p><p>启用按需加载技术的结果运行时间:1082【不稳定徘徊在1082-8828】<br/>使用的是按需加载技术,也就是仅当该函数被调用的时候才加载,然后加上Cache技术,后面的调用就在内存中处理。<br/>时间远远长于其它,是因为加载文件耗去了绝大部分时间<br/>不启用按需加载技术,而是预先加载模块:<br/>结果运行时间:202 <如果不使用Cache功能每次都要查找所花时间:1790></p> UploadFile/2006-12/20061261851194242.gif<br/>
页:
[1]