关于Lua metatable的性能问题
动态

关于Lua metatable的性能问题

年前没活了,呜呜 ​​由于我们业务层是使用lua,于是出于好奇心做了一些测试 ​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!

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

发生了一个未处理的错误

页面可能无法正常工作,请尝试重新加载。

连接已断开

正在尝试重新连接,请稍候…

连接已断开

请重新加载页面以恢复正常使用。