由于我们中间有一些编程向导,所以我想问你们答案,而不是试图猜测。
我一生中做了很多优化,并且在大多数情况下,这种优化水平是完全不必要的。
但是,我不确定为什么方法1(见下文)比方法2(见下文)快2到2.5倍。我本来希望如此,因为方法2的函数X包含函数Y,所以它的速度至少要比方法1快,因为方法1中的两个函数是分开的。
方法1背后的速度明显快于方法2的原因是什么?是一些编译器优化吗?
-- METHOD 1:
local function Y()
return true
end
local function X()
Y()
return true
end
local getTimer = system.getTimer
local startTime = getTimer()
local iterations = 1000000
for i = 1, iterations do
X()
end
print( "TIME:"..(getTimer()-startTime) )
-- METHOD 2:
local function X()
local function Y()
return true
end
Y()
return true
end
local getTimer = system.getTimer
local startTime = getTimer()
local iterations = 1000000
for i = 1, iterations do
X()
end
print( "TIME:"..(getTimer()-startTime) )
函数是Lua中的实际对象。您要从原型中实例化此类对象,并将其放入名为Y的变量中。这样做有一些代价:分配,挂接调试信息,关闭所有升值等等。有关某些相关位,请参见here。
在#2中,您每次都会执行此操作。另外,在X的末尾,Y超出范围,而没有其他任何引用,因此成为垃圾,在某个时候有助于收集。