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 ...
一周排行
  • 金融脱媒是指人口从金融机构直接对金融市场买基金.保险.直接债务个股,另一种是公司通过发行股票.债券和其他融资直接金融市场. 在当前互联网思维影响下,从专家学者一直到各路媒体,觉得随着互联网信息的极大丰富,人们能够脱离 ...
  • 易网科技需要招多名编译和一名平面设计实习生!易网科技中心招聘产品一名 工作地点:北京岗位要求:1.有两年以上产品策划经验,曾参与负责过产品项目策划:2.热爱互联网,关注互联网的新事物和用户行为变化,强烈的创新意识,对 ...
  • 就在几天前,3D打印枪支社区Defense Distributed宣布已经制造出世界首个3D打印枪支,今天,Defense Distributed对外宣称,3D打印出来的枪支测试成功.<福布斯>杂志记录了 ...
  • 解决ssh客户端登录慢的命令   编辑/etc/ssh/ssh_config文件,添加以下2行配置:      GSSAPIAuthentication no   www.2cto.com      GSSAPIDe ...
  • 我学英语的路程也是相当的曲折,初高中的英语一塌糊涂,大学勉强过了四级,考博士时英语考了两次才通过,工作后用背单词这种低效率的办法(<把你的英语用起来>的1.2节严厉批判了死背单词的方法)想使自己的英语水平 ...
  •       Oracle数据库系统是美国Oracle公司提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户.服务器(Client/Server)或B/S体系结构的数据库之一.比如Oracle数据库是目前世界 ...
  • 嗯,这是一道简单题 注意二叉搜索树的子树中序一定是连续的 又因为取值修改是任意的并且修改代价与权值无关 不难想到把权值离散化,然后按找数据值排序,然后dp f[i][j][w]表示从i~j的节点构成一棵子树且所有节点 ...
  • ——史上最牛的木马运输机 目前结局:偃旗息鼓.是避风头还是气数已尽? 磁碟机病毒作者仿佛比熊猫烧香作者更聪明一些,面对网民的骂声一片,面对各大反病毒厂商的联合剿杀,他在最风头正劲的时刻选择了“跑路”,但也许他只是短暂 ...
  • -- Create table /*create table TEST_TABLE ( STUDENT VARCHAR2(200), SUBJECT VARCHAR2(200), GRADE NUMBER ) tab ...
  •          7月份的学习,基本就是J2SE的学习了.主要分为3个阶段.              1. 7月1号到7月10号,看完了所有视频;              2. 7月11号到7月17号,放假!尽管 ...