关于Lua metatable的性能问题

关于Lua metatable的性能问题

2022-01-26 543次阅读 0人点赞

年前没活了,呜呜
​​由于我们业务层是使用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)

image

​结论:慎用function!

最后编辑:2022年1月26日 10:33:48

相关词条

留言板

发生未知错误

请尝试刷新页面,如果问题无法解决,可加 QQ群 761794704 进行反馈