Lua 性能分析器示例

lua-users home
wiki

[!] 版本说明: 以下代码适用于旧版本的 Lua,Lua 4。它在 Lua 5 下无法直接运行。

tinsert 和 tremove 示例

看看这段代码

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()

运行性能分析器后,您将得到以下结果图

(从 maintremove 的调用只是为了说明性能分析器可以告诉您瓶颈发生在哪个调用点)

该图显示 tremove 是一个瓶颈,因为它是一个黑盒子。由于 tremove 已经是非常快的例程,该怎么办?无论我们做什么,为了使程序更快,我们必须集中精力解决从 remtremove 的调用。阅读 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()

该图显示没有其他瓶颈(因为颜色几乎相同)。事实上,黑盒子现在是 insrem,因此它们是执行时间更长的函数。

第一步在我的奔腾 200 MMX 上执行大约需要 1 秒,第二步几乎不需要时间。


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2007 年 1 月 11 日凌晨 4:27 GMT (差异)