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

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

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

并且该图显示没有其他瓶颈(因为颜色几乎相同)。实际上,黑盒子现在是 insrem,所以它们是执行时间最多的函数。

在我的 pentium 200 MMX 上,第一步执行了将近 1 秒,第二步执行了将近 0 秒。


RecentChanges · preferences
编辑 · 历史记录
最后编辑于 2007 年 1 月 10 日晚上 10:27 GMT (差异)