2

Lua を言語の 1 つとして使用してスピードテストをしようとしていますが、可能であればコードを少し速くする方法についてアドバイスが欲しかったのです。非常に具体的なパラメータを見ているので、自分で速度テストを行うことが重要です。

コードは次のようなファイルから読み取っていますが、数値はランダムに生成され、範囲は 1 zu 1 000 000 です。1 つのリストには 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 に答える