Unity ToLua 性能优化(二)避免使用反射
在tolua中为获取unity组件有一种方法是通过GetComponent("Transform"),
代码1
local transTest = self.gameObject:GetComponent("UISprite");
很简单也很常用的功能,获取gameObject上面的一个组件,但是这里其实是用了反射,效率很差
为了避免反射,我们用在增加一个静态方法获取组件
代码2
static public UISprite GetUISprite(GameObject goRoot)
{
return goRoot.GetComponent<UISprite>();
}
local transTest = LuaUtil.GetUISprite(self.gameObject);
这样就可以避免反射
优化性能测试:
测试代码1
function LuaUtilTest.DoTest(goTest)
local tmStart = os.clock();
local testCount = 1000000;
local sprTest;
for __idx=1,testCount do
sprTest = goTest:GetComponent("UISprite");
end
print("LuaUtilTest cost:", os.clock()-tmStart);
end
测试代码2
function LuaUtilTest.DoTest(goTest)
local tmStart = os.clock();
local testCount = 1000000;
local sprTest;
for __idx=1,testCount do
sprTest = LuaUtil.GetUISprite(goTest);
end
print("LuaUtilTest cost:", os.clock()-tmStart);
end
在unity2018.3 Windows10平台下 分别执行了100万次结果
| 测试代码 | 第一次 | 第二次 | 第三次 |
|---|---|---|---|
| 测试代码1 | 48.172s | 46.084s | 46.378s |
| 测试代码2 | 0.494s | 0.480s | 0.668s |
两者效率差不多有百倍了
浙公网安备 33010602011771号