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

测试环境: unity4.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

热更新脚本C#light,ulua,Scorpio性能比较的更多相关文章

  1. unity3d热更新解决方案,使用ulua插件开发的框架。

    ulua插件下载地址 www.ulua.org,下面要说的是ulua的开发框架. 首先是 LuaLoader 类,它负责把一个 lua 的 table 加载起来,使此 lua 的 table 像一个 ...

  2. 阿里云 持续集成环境自动部署cordova项目热更新脚本

    linux脚本: #!/bin/sh rm -rf /home/tomcat/xiecang_hybird_web/xiecang_hybird_web.zip rm -rf /home/tomcat ...

  3. 深入理解xLua热更新原理

    热更新简介 热更新是指在不需要重新编译打包游戏的情况下,在线更新游戏中的一些非核心代码和资源,比如活动运营和打补丁.热更新分为资源热更新和代码热更新两种,代码热更新实际上也是把代码当成资源的一种热更新 ...

  4. Unity 安卓下DLL热更新一(核心思想)

    大家都知道一谈起热更新的话首选是Ulua这个插件, 其实Unity可以使用dll热更新的,如果你实在不想用Lua来编写逻辑,0.0请下看Dll+AssetBundle如何实现热更新的.让你看完这个文章 ...

  5. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- Demo分析

    如何创建工程 下载最新的Unity发布插件包. 打开Unity,新建一个项目 将插件包导入 在菜单中点击ASRuntime/Create ActionScript3 FlashDevelop HotF ...

  6. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用第三方组件

    Unity开发中,常常会用到一些第三方组件.本文以实例介绍如何在热更新脚本中使用这些第三方组件. 首先说明几个基本步骤: 第三方组件通常是以dll或者源码方式提供的,它们本身往往无法热更. 我们在脚本 ...

  7. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- CustomYieldInstruction 自定义中断指令

    ActionScript3脚本引擎为了方便热更新逻辑开发,提供的从脚本继承Unity类库功能在一些情况下可以提供开发的便利. 这次来建立一个示例,演示一下如何在脚本中自定义协程中断指令 Unity中的 ...

  8. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用FairyGUI (一)

    我们的热更新脚本在实际使用中,当然也要支持常用的第三方组件,例如这里介绍一个非常实用的第三方UI库:FairyGUI. 什么是FairyGUI 这里照搬FaiyGUI官网的介绍: 重新定义 UI 制作 ...

  9. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用FairyGUI (二)

    上次讲解了FairyGUI的最简单的热更新办法,并对其中一个Demo进行了修改并做成了热更新的方式. 这次我们来一个更加复杂一些的情况:Emoji. FairyGUI的   Example 04 - ...

随机推荐

  1. DNS部署(centos 6)

    DNS部署(主从) 安装环境:CentOS 6.8 准备两台主机:192.168.137.13(主DNS).192.168.137.14(从DNS) EPEL仓库使用阿里源 rpm -ivh http ...

  2. linux安装ftp组件

    1   安装vsftpd组件 linux系统安装完后,有/etc/vsftpd/vsftpd.conf 文件,是vsftp的配置文件. [root@bogon ~]# yum -y install v ...

  3. Java——jar命令

    把*.class压缩成一个文件,这样的文件就称为jar文件. 如果想要生成jar文件,直接使用JDK中bin目录里的jar.exe就可以将所有的类文件进行压缩. 当用户得到一个jar文件后,即可通过设 ...

  4. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

  5. 《深入理解bootstrap》读书笔记:第一章 入门准备

    一.bootstrap框架简介 Bootstrap是最流行的前端开发框架. 什么是框架:开发过程的半成品. bootstrap具有以下重要特性: (1)完整的CSS样式插件 (2)丰富的预定义样式表 ...

  6. php 生成随机字符串 abcdeft....789

    ) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = &quo ...

  7. 安装docker管理工具rancher

    http://blog.csdn.net/freewebsys/article/details/51136562 docker(2):安装docker管理工具rancher rancher是一个Doc ...

  8. [Unity] UGUI研究院之游戏摇杆

    最近在做Unity基于UGUI的摇杆,发现了一种非常简单并且巧妙的方法,原文在这里, 不过要FQ!!http://godstamps.blogspot.tw/2015/07/unity-ugui-sc ...

  9. Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 'AR模式']

    public function getMinLimit () {        $sql = "...";        $result = yii::app()->db-& ...

  10. Thinkphp 连接查询的使用

    方法一:使用table()方法 $tables = 'b_order ordert, b_busbid busbid'; $map['busbid.buscompanyid'] = 1; $map[' ...