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

两者效率差不多有百倍了

posted @ 2020-11-29 18:37  搬山码农  阅读(178)  评论(0)    收藏  举报