Lua 代码性能分析

lua-users home
wiki

Lua 性能分析器

以下是一些为 Lua 提供的性能分析器

您也可以通过 Lua 调试库 [1] 编写自己的性能分析器。

另请参阅 优化技巧

旧版 Lua 4 示例

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

以下是一些分析 Lua 代码的方法(来自 Roberto):-

一种非常简单的方法

setcallhook(function (event)
  local x = getinfo(2, 'nS')
  print(event, x.name, x.linedefined, x.source, clock())
end) 

第一个改进是将其用 C 重写。第二个(也是主要的)改进是在程序内部进行大部分计算以减少输出(参见另一种方法)。

尽管它很原始,但它确实有效。我经常使用它。当然,时钟并不十分准确,钩子本身会影响所有时间,结果可能很大。但它仍然可以让你大致了解代码内部发生了什么。

另一种方法

local T = {}
setcallhook (function (event)
  local f = getinfo(2, 'f').func
  local e = %T[f]
  if e == nil then
    local x = getinfo(2, 'nS')
    e = {name = x.name, line = x.linedefined, source = x.source,
                 time = 0, count = 0}
    %T[f] = e
  end
  if event == 'call' then
    e.time = e.time - clock()
    e.count = e.count + 1
  else
    e.time = e.time + clock()
  end
end)

-- You must call `dump' when your program ends
function dump ()
  setcallhook()   -- cannot change `T' during traversal!
  for k,v in %T do
    print(v.name, v.line, v.source, v.count, v.time)
  end
end 

(同样,用 C 编写的代码对程序的影响要小得多。)


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2021 年 1 月 18 日下午 11:51 GMT (差异)