Lua 性能分析器示例 |
|
看看这段代码
t={[0]=1}
n=1000
function ins()
for i = 1, n do
tinsert(t, i)
end
end
function rem()
for i = 1, n do
tremove(t, 1)
end
end
ins()
tremove(t, 0)
rem()
运行性能分析器后,您将得到结果图
(从 main 调用 tremove 只是为了说明性能分析器可以告诉您瓶颈发生在哪个调用点)
该图显示 tremove 是一个瓶颈,因为它是唯一的黑盒子。由于 tremove 已经是一个非常快速的例程,我们该怎么办?无论我们做什么,为了让程序运行得更快,我们必须专注于 rem 调用 tremove。阅读 tremove 规范,我们意识到它在每次调用时将所有大于 n 的元素向前移动一行,这需要时间。
由于我们不需要任何移动,因此有一个更快的代码可以执行相同的操作
t={[0]=1}
n=1000
function ins()
for i = 1, n do
tinsert(t, i)
end
end
function rem()
for i = n, 1, -1 do
tremove(t, n)
end
end
ins()
tremove(t, 0)
rem()
并且该图显示没有其他瓶颈(因为颜色几乎相同)。实际上,黑盒子现在是 ins 和 rem,所以它们是执行时间最多的函数。
在我的 pentium 200 MMX 上,第一步执行了将近 1 秒,第二步执行了将近 0 秒。