
关于Lua metatable的性能问题
2022-01-26
543次阅读
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