2
パフォーマンスが重要なプロジェクトのテーブルに要素を挿入する必要があるため、どの方法が高速なのかを知る必要がありました。私は以下のコードを実行しました:なぜt [#t + 1] = eはtable.insert(t、e)より速いのですか?
local total = 0
local mytable = {}
for i = 1, 1e7 do
local clock = os.clock
local push = table.insert
local t = clock()
push(mytable, 0)
t = clock() - t
total = total + t
end
print("table.insert: "..total)
local total = 0
local mytable = {}
for i = 1, 1e7 do
local clock = os.clock
local t = clock()
mytable[#mytable + 1] = 0
t = clock() - t
total = total + t
end
print("Manual approach: "..total)
をそして、それは、第2の方法は、約2秒速く最初の1よりも走ることが判明します。
最初のものは関数呼び出しですが、2番目のものは#
という演算子を呼び出し、追加して、値にインデックスを割り当てます。すべてLua側で行います。それはC側にあります。
なぜ、2番目の方法がより速いのですか?機能は本当に遅いですか?
を挿入します。 t [i] = e'はさらに速くなります –
ループの外で時計のものと 'local push = table.insert'を動かします。それは、おそらくグローバル変数へのアクセスを測定しているからです。すべてが私の約3倍速くなります。そして、私は2つのアプローチの間に7%の違いがあります。 – lhf
@Egor Skriptunoffあなたはテーブルの長さを含む変数を保持する必要がありますか? – user6245072