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,因此它们是执行时间更长的函数。
第一步在我的奔腾 200 MMX 上执行大约需要 1 秒,第二步几乎不需要时间。