博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
热更新脚本C#light,ulua,Scorpio性能比较
阅读量:5280 次
发布时间:2019-06-14

本文共 2231 字,大约阅读时间需要 7 分钟。

http://www.unity蛮牛.com/thread-32861-1-1.html

测试环境: 4.5.2  三个脚本全是源码导入  PC :处理器 Intel(R) Core(TM) i5-3470 CPU @ 3.20GHz 3.60GHz  内存: 8.00GB  系统 : Windows 7 64位先贴下源码:(注:cls的作者说 cls脚本作用域判断比较厉害 所以利用脚本里面的for循环 可能有点损耗cls的测试结果 更多测试结果请下载源码自行测试)

            Stopwatch watch = null;
            {
                watch = Stopwatch.StartNew();
                Script env = new Script();
                env.LoadLibrary();
                env.PushAssembly(typeof(GameObject).Assembly);
                var token = env.LoadString(m_Scorpio);
                m_ScorpioRuntime = string.Format("Scorpio 耗时:{0} ms  返回值 : {1}", watch.ElapsedMilliseconds, token);
            }
            {
                watch = Stopwatch.StartNew();
                LuaState env = new LuaState();
                var token = env.DoString(m_Lua);
                m_LuaRuntime = string.Format("Lua 耗时:{0} ms  返回值 : {1}", watch.ElapsedMilliseconds, token != null && token.Length > 0 ? token[0] : "null");
            }
            {
                CLS_Environment env = new CLS_Environment(new ScriptLogger());
                env.RegType(new RegHelper_Type(typeof(GameObject)));
                var token = env.ParserToken(m_CLS);
                var expr = env.Expr_CompilerToken(token, false);
                watch = Stopwatch.StartNew();
                var value = env.Expr_Execute(expr, null);
                m_CLSRuntime = string.Format("cls 耗时:{0} ms  返回值 : {1} (因听说CLS解析很慢 故只计算Expr_Execute的时间)", watch.ElapsedMilliseconds, value);
            }
Test1: 测试脚本自运算效率(测试结果:  lua的自运算能力是最快的 毕竟是c实现的底层 而且号称世界最快的脚本引擎)
<ignore_js_op> 
Test2:测试调用c#函数以及创建对象的效率(测试结果:ulua在调用c#函数的时候毕竟要先把对象序列化成table调用 所以比较耗时  sco和cls是直接调用的反射或者快速反射一类的 没有序列化的过程 所以可以弥补一些自运算带来的损失 )
<ignore_js_op> 
Test3:测试调用c#深层变量的效率(测试结果:ulua在深层调用上没有想象的 掉的厉害  应该有对一个Type的序列化有缓存)
<ignore_js_op> 
结果:
ulua   在自运算比较多的情况下还是很占优势的 毕竟是c语言的底层 而且熟知lua的人很多 论坛,教程都不少  在入门方面还是很占优势的
         缺点是 出了BUG比较麻烦 ,而且出了BUG大多都是内存方面的  会导致应用程序直接崩溃  BUG不好追踪  平台方面支持 Windows,android,IOS 不支持WP 如果要做WP版本估计要费一番功夫
cls     语法同c# 优势很明显  如果怕某一块代码效率不行 或者相对比较稳定 不多动的代码 可以直接转成c# 效率立马就恢复了 而且不用担心出BUG  而且是c#语言写的 出了问题也能快速定位(平台支持 Windows,Andoird,IOS,WP等 要发布别的平台还是比较方便的)
        缺点 效率好像有点问题 
sco   测试结果效率还行,源码工程比较小,dll支持72K 源码很容易看懂 有点工作经验的 有个半天应该就可以看完了  而且是c#语言写的 出了问题也能快速定位 (平台支持 Windows,Andoird,IOS,WP等 要发布别的平台还是比较方便的)
        缺点 语法类似javascript  而且有部分语法不相同  语言基础人数比较少
总结:三种脚本各有各的优势,毕竟只是脚本,不用太在乎效率,也不会有人拿脚本写一个游戏,只是用来做一些配置还有UI的操作,这些代码三种脚本的效率都无伤大雅
          关键在个人的喜好! 动态脚本和静态脚本各有各的好处!
最后奉上测试源码:https://github.com/qingfeng346/ScriptTestor 
Scorpio-CSharp源码地址:https://github.com/qingfeng346/Scorpio-CSharp 
QQ群讨论:245199668

转载于:https://www.cnblogs.com/123ing/p/4118070.html

你可能感兴趣的文章
ABP框架系列之四十一:(Nuget-Packages-Nuget包)
查看>>
head first 设计模式文摘
查看>>
在Android中Intent的概念及应用(二)——Intent过滤器相关选项
查看>>
数据库备份问题
查看>>
11.Java2核心技术—Java5.0新特性
查看>>
前端面试题(4)iframe有哪些优点?iframe缺点是什么?
查看>>
一道腾讯面试题的思考:到底谁会赢?
查看>>
【Bugly干货分享】微信文件微起底Ⅰ
查看>>
大数据 技术入门02
查看>>
参考着做个方法,处理js不能触发value改变事件,---只是定时器用时间间隔检查和处理,如果要求严格的,可能并不适用...
查看>>
fiddler 不能抓包解决
查看>>
信号完整性概述
查看>>
2.MyBatis有代理增删改
查看>>
②萨克斯,音符的悠扬(Session管理)
查看>>
如何能尽快看完一个网页的结构
查看>>
使用Eclipse自带的Axis1插件生成Web Service服务端/客户端
查看>>
Core Animation 文档翻译(第三篇)—设置Layer对象
查看>>
HDOJ2004 ( 成绩转换 ) 【水题】
查看>>
python基础二
查看>>
作用域和js预解析机制
查看>>