xlua性能测试

在xlua的框架下通过对一个Vector3进行简单的赋值操作

local function profile()

                local t = CS.UnityEngine.Time.realtimeSinceStartup

                local v = CS.UnityEngine.Vector3(0, 0, 0)

                for i=1,10000000 do

                    v.x = i

                    v.y=i

                end

                local t2 = CS.UnityEngine.Time.realtimeSinceStartup

                print('profile0', t2 - t)

            end

            profile()

输出profile0 8.709219455719

2.Vector3原来的映射方案Vector3 -> userdata,但是把Vector3的方法实现改为lua实现,通过xlua.genaccessor实现不经过C#直接操作内存

(仍然沿用映射方案的好处是userdata比table更省内存,但操作字段比table性能稍低,一个vector3的结构体userdata(size=12Byte)比table(64位空table size ~= 80Byte)更省内存)

local function profile()

                local t = CS.UnityEngine.Time.realtimeSinceStartup

                local v = CS.UnityEngine.Vector3(0, 0, 0)

                for i=1,10000000 do

                    --v:Set(i,i,i)

                    v.x=i

                    v.y=i

                end

                local t2 = CS.UnityEngine.Time.realtimeSinceStartup

                print('profile', t2 - t)

            end

            profile()

输出profile 1.851414680481

3.将struct映射到table

[GCOptimize(OptimizeFlag.PackAsTable)]

    public struct PushAsTableStruct

    {

        public int x;

        public int y;

    }

local function profile()

                local t = CS.UnityEngine.Time.realtimeSinceStartup

                local v = CS.XLuaTest.PushAsTableStruct(4, 5)

                for i=1,10000000 do

                    v.x = i

                    v.y = i

                end

                local t2 = CS.UnityEngine.Time.realtimeSinceStartup

                print('profile2', t2 - t)

            end

            profile()

输出profile2 0.181227684021

从结果来看默认的映射方式最慢,消耗是改造成table直接操作内存的4倍,是结构体映射的40倍,差距还是比较明显的

你可能感兴趣的:(xlua性能测试)