一:实例化并带清空对象的对比
- lua中实例化5w个空对象并且直接删除
复制代码
平均大概都要3.3秒
- mono中实例化5w个空对象并且直接删除
复制代码
大概平均下来是0.75秒
二:调用方法的对比
耗时:1.64秒
- mono中调用方法做一个简单处理,5w次
复制代码
耗时:0.01秒
三:总结
从2组对比来看,第一组lua是mono的4.4倍耗时,第二组lua是mono的164倍耗时.
3.1:可能第一直觉,lua中go.transform会实时去Get Transform的脚本,那么我们优化一下
复制代码 把transform缓存一下,测试时间消耗:1.3秒 3.2:实际上上段优化中还是存在Vector3(0,0,0)是构造一个新对象,那么我们直接用Vector3.zero呢
复制代码 耗时:0.86秒 3.3:最后我们把localPosistion也缓存一下
复制代码 耗时:0.35秒 把指定的'对象'先取出来,在lua中都能提高很高的执行效率.因为通过" . " 去获取一个value时候,实际上是遍历了table把里面的key给搜索一遍.
至于在Unity3D中,我个人还是觉得,如果是涉及到update每帧都要处理的逻辑.还是mono妥妥的.实际上我们可以通过缓存这些变量对象在lua中.可以最大限度地减少性能消耗.
- 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
复制代码

平均大概都要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);
复制代码

大概平均下来是0.75秒
二:调用方法的对比
- lua中调用方法并做一个简单的处理,5w次
function main.testCall(go) go.transform.localPosition = Vector3(0,0,0)
end
复制代码

耗时:1.64秒
- mono中调用方法做一个简单处理,5w次
void TestInstantiate(){ transform.localPosition = new Vector3(0, 0, 0); }
复制代码

耗时: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
复制代码
function main.testCall(go) go.localPosition = Vector3.zero
end
复制代码
function main.testCall(pos) pos = Vector3.zero
end
复制代码
至于在Unity3D中,我个人还是觉得,如果是涉及到update每帧都要处理的逻辑.还是mono妥妥的.实际上我们可以通过缓存这些变量对象在lua中.可以最大限度地减少性能消耗.