
关于Lua metatable的性能问题
                    2022-01-26
                    
                    609次阅读
                    
                    0人点赞

搬运姬
            Lv 9编辑者
搬运经过授权允许的资料
                作者:
                月海潮汐制作组
                  原文发表在:
                https://weibo.com/7573413282/Lcp2jccWs
年前没活了,呜呜
由于我们业务层是使用lua,于是出于好奇心做了一些测试
lua的元表很好用,但是也会影响性能!这里测试了几种情况,结论也有些出乎意料
直接贴代码
local classA = {
    a = 1,
    b = 2,
    t = {
        d = 1
    }
}
local classB = {
    d = 1
}
local func = function(_t, key)
    return classB[key]
end
local t1 = os.clock()
for i = 1, 1000000, 1 do
    local d = classA.a
end
dump("访问存在变量:" .. os.clock() - t1)
local t2 = os.clock()
for i = 1, 1000000, 1 do
    local d = classA.t.d
end
dump("访问子类变量:" .. os.clock() - t2)
setmetatable(classA, {
    __index = func
})
local t3 = os.clock()
for i = 1, 1000000, 1 do
    local d = classA.d
end
dump("通过metatable访问变量(函数):" .. os.clock() - t3)
setmetatable(classA, {
    __index = classB
})
local t4 = os.clock()
for i = 1, 1000000, 1 do
    local d = classA.d
end
dump("通过metatable访问变量(table):" .. os.clock() - t4)

结论:慎用function!
                最后编辑:2022年1月26日  10:33:48
 
        
