今天写到循环逻辑,纠结于是用更少的循环调用函数还是用更少的函数,多循环两次。于是做了个实验,发现基于c的lua,函数调用的代价果然很高。
local tb = {}
local max = 10000000
for i=1, max do
tb[i] = i
end
function check(i,max)
if tb[i] == max-1 then
print("tb["..i.."] = "..tb[i])
end
end
for i=1, max do
check(i,max-1)
check(i,max-1)
end
–这段代码执行的平均时间为3.3s-3.4s。
“`
local tb = {}
local max = 10000000
for i=1, max do
tb[i] = i
end
function check(i,max)
if tb[i] == max-1 then
print(“tb[“..i..”] = “..tb[i])
end
end
for i=1,max do
if tb[i] == max-1 then
print(“tb[“..i..”] = “..tb[i])
end
end
for i=1,max do
if tb[i] == max-1 then
print(“tb[“..i..”] = “..tb[i])
end
end
for i=1,max do
if tb[i] == max-1 then
pb[“..i..”] = “..tb[i])
end
end
“`
而这段代码执行的平均时间为2.0s以内。所以可以认为,选择方案二更合适。