2

我正在尝试使用 Lua 作为其中一种语言进行速度测试,我只是想要一些建议,如果可能的话,我如何使我的代码更快一些。我自己做速度测试很重要,因为我正在查看非常具体的参数。

代码从一个看起来像这样的文件中读取,但数字是随机生成的,范围为 1 zu 1 000 000。一个列表中有 100 到 10 000 个数字:

type
(123,124,364,5867,...)

type
(14224,234646,5686,...)

...

type意味着另一种语言,因此可以忽略。我只是把它放在这里,所以你知道为什么我没有解析每一行。这是我的 Lua 代码:

incr = 1
for line in io.lines(arg[1]) do
  incr = incr +1
  if incr % 3 == 0 then
    line:gsub('([%d]+),?',function(n)tonumber(n)end)
  end
end

现在,代码可以正常工作,并且完全符合我的要求。这不是让它工作,这只是关于速度。我需要想法和建议以使代码以最佳速度运行。

提前感谢您的任何答案。

4

1 回答 1

3

恕我直言,这个tonumber()基准测试相当奇怪。大部分 CPU 时间将花在其他任务上(正则表达式解析、文件读取……)。

与其转换为数字并忽略结果,不如计算输入文件中所有数字的总和更合乎逻辑:

local gmatch, s = string.gmatch, 0

for line in io.lines(arg[1]) do
  for n in gmatch(line, '%d+') do
    s = s + n  -- converting string to number is automatic here
  end
end

print(s)
于 2013-07-31T18:54:29.313 回答