Lua字符串转数字解析速度优化

我正在尝试使用 Lua 作为其中一种语言制作一个速度测试,我想知道如何尽可能让代码运行更快。由于我正在观察非常特定的参数,因此重要的是我自己做一个速度测试。

代码正在从一个类似于以下内容的文件中读取,但数字是随机生成的,范围从 1 到 1,000,000。一个列表中有 100 到 10,000 个数字:

类型
(123,124,364,5867,...)

类型
(14224,234646,5686,...)

...

类型 是另一种语言,所以可以忽略它。我只是把它放在这里,让你知道为什么我没有解析每一行。这是我的 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

现在,这段代码可以正常工作并且实现了我想要的功能。但我需要一些想法和建议,以使代码达到最佳速度。

谢谢您提前的任何回答。

点赞
用户1847592
用户1847592

我认为,这个 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  -- 在此处将字符串转换为数字是自动的
  end
end

print(s)
2013-07-31 18:54:29