Unity3D 关于uLua在Unity3D的性能测试

一:实例化并带清空对象的对比

- lua中实例化5w个空对象并且直接删除

function main.test( )
    print('lua start at:'..Time.realtimeSinceStartup)
    for i=1,50000 do
        local go = GameObject('init')
        GameObject.DestroyImmediate(go)
    end
    print('lua end at:'..Time.realtimeSinceStartup)
end

Unity3D 关于uLua在Unity3D的性能测试

平均大概都要3.3秒


- mono中实例化5w个空对象并且直接删除

Debug.Log("mono start at:"+Time.realtimeSinceStartup);
		for(int i =0; i < 50000; i++){
			GameObject go = new GameObject("init");
			DestroyImmediate(go);
		}
		Debug.Log("mono end at:"+Time.realtimeSinceStartup);

Unity3D 关于uLua在Unity3D的性能测试

大概平均下来是0.75秒


二:调用方法的对比

- lua中调用方法并做一个简单的处理,5w次

function main.testCall(go)
    go.transform.localPosition = Vector3(0,0,0)
end

Unity3D 关于uLua在Unity3D的性能测试

耗时:1.64秒


- mono中调用方法做一个简单处理,5w次

void TestInstantiate(){
    	transform.localPosition = new Vector3(0, 0, 0);
    }

Unity3D 关于uLua在Unity3D的性能测试

耗时:0.01秒


三:总结

从2组对比来看,第一组lua是mono的4.4倍耗时,第二组lua是mono的164倍耗时.


3.1:可能第一直觉,lua中go.transform会实时去Get Transform的脚本,那么我们优化一下

function main.testCall(go)
    go.localPosition = Vector3(0,0,0)
end

把transform缓存一下,测试时间消耗:1.3秒

3.2:实际上上段优化中还是存在Vector3(0,0,0)是构造一个新对象,那么我们直接用Vector3.zero呢

function main.testCall(go)
    go.localPosition = Vector3.zero
end

耗时:0.86秒

3.3:最后我们把localPosistion也缓存一下

function main.testCall(pos)
    pos = Vector3.zero
end

耗时:0.35秒


把指定的'对象'先取出来,在lua中都能提高很高的执行效率.因为通过" . " 去获取一个value时候,实际上是遍历了table把里面的key给搜索一遍.

至于在Unity3D中,我个人还是觉得,如果是涉及到update每帧都要处理的逻辑.还是mono妥妥的.实际上我们可以通过缓存这些变量对象在lua中.可以最大限度地减少性能消耗.



更多相关文章
  • 文/阳光 持续了一年的互联网金融狂热在2014年年初终于降温,甚至暴露出其互联网思维.高科技工具和金融创新等金字招牌包装下的种种"败絮"来. 据媒体的最新报道,仅仅是过去6月份的一个月内,已经有6家网贷平台跑路失联.国内1200多家过去一年中新成立的P2P网贷平台,有148个平台 ...
  • 日前,全球最大的漏洞响应平台——补天漏洞响应平台(butian.360.cn)公开了一个中国人寿网站的struts2漏洞.该漏洞虽然得到紧急修复,却再次引发行业对漏洞修复迟缓的关注.   11月30日,白帽子“帅气凌云”通过补天漏洞响应平台向中国人寿网站提交了一个struts2的安全漏洞;12月10 ...
  • 易网科技讯 5月8日消息,易车网(BITA)今日发布了截至2014年3月31日的第一季度财报.财报数据显示,易车网第一季度营收人民币3.534亿元(约合5690万美元),同比增长47.6%:净利润人民币3690万元(约合590万美元),同比增长87.4%. 第一财季业绩摘要: 营收为人民币3.534 ...
  • 网友购买的"问题"车票中国江西网讯记者李运辉报道: 25日,网友发布微博称在12306官网上买了车票,上车时却没有找到票面上显示的车厢.
  • 随着手机的日益普及,手机安全越来越受到手机用户们的广泛关注.手机安全主要包括两方面内容,一方面是指来自手机病毒的侵害:另一方面是指因他人为谋取利益而造成的侵害,包括骚扰电话.骚扰短信.诈骗.信息盗窃.泄密等.     去年"五一"期间爆发了一场彩信病毒,很多手机"中毒& ...
  • 本工具类经过测试可用,之前写的没有使用CipherInputStream和CipherOutputStream,生成的加密文件与源文件大小不一致,加密时没有问题,解密时总是抛出如下异常: Exception in thread "main" javax.crypto.BadPad ...
一周排行
  • Linux的性能分析工具众多,在微博上发现了系统性能专家Brendan D. Gregg,在最近LinuxCon NA 2014大会上发布的关于Linux性能方面的talk和幻灯片.和去年比较,今年增加了测试和优化两 ...
  • 上一篇<多线程第一次亲密接触 CreateThread与_beginthreadex本质区别>http://www.2cto.com/kf/201204/126599.html中讲到一个多线程报数功能.为 ...
  • 目前网络上各种各样的病毒和攻击肆虐,毫无顾忌,造成了很大的损失,为此越来越多的路由器都开始带有防火墙功能,对于高端路由器,更是可以通过命令对路由器进行一定的设置,以减少病毒和攻击带来的损失,本文以H3C路由器为例,介 ...
  • [shell]在函数中使用getopts   以前在.bashrc中写过一个函数,里面使用了getopts, 但是奇怪的是,这个函数调用过一次后,就不能再次解析参数,后来经过查询,发现是OPTIND变量的问题, 原代 ...
  • 为了提升服务和产品质量以及流程效率,安全主管可以借鉴现成的持续改进方法,比如六西格玛.kaizen和kieffer.针对数据安全和隐私的持续改进可以有助于推动企业内流程.文化和行为的变革,主要通过下列方式:1)建立内 ...
  • 一个简单问题:如下2种Html写法,那个加载速度快? 猜你在找 查看评论 * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
  • 易网科技讯  1月19日消息,据彭博社报道,穆迪投资者服务下调索尼和松下的信用评级,认为2家公司难以扭转亏损的电视业务.穆迪将索尼的长期信用评级下调至"Baa1",是该机构划定的10个级别的倒数第 ...
  • SMTP即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式.在QQ邮箱中也有这个功能,那么,qq邮箱怎么开启smtp服务呢?针对此问题,本文就为大家进行解答 SMTP即简单邮件 ...
  • RPM使用详解 在Linux 操作系统中,有一个系统软件包,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比“添加/删除程序”强很多,它就是 Red Hat Package Manager(简称RP ...
  • 在JavaScript中,函数可以:被赋值给一个变量,被赋值为对象的属性.作为参数被传入别的函数.作为函数的结果被返回.用字面量来创建. 1. 赋值给一个变量 //声明一个函数,接受两个参数 function add ...