私はLuaにテーブルを操作する関数を持っており、テーブルにエントリを繰り返し追加しています。
function DoStuff()
local table = {};
for i = 1, 1000 do
local name, value = GetSomething(i);
if (CheckSomething(name, value))
table[name] = value
end;
end;
end;
私はこれが速いことを知っています。Luaには優れたハッシュテーブルアルゴリズムがあります。しかし今、私は自分の関数の一部を分割する必要があるので、それを単体テストすることができます:
function DoStuff()
local table = {};
for i = 1, 1000 do
local name, value = GetSomething(i);
--split out checking so it's testable
table = ParseTheThing(table, name, value);
end;
end;
Luaは参照によるパラメーターの受け渡しをサポートしていないことを知っています。代わりに、アイテムを追加する必要がある場合table
、Luaはコピーを作成し、そのコピーを返す必要があります。
--Core checking function
function ParseTheThing(table, name, value)
if (CheckSomething(name, value))
table[name] = value
end;
return table;
end;
CheckSomething
したがって、 Luaを呼び出すたびに、ガベージコレクションが必要な別のテーブルが作成されるようです。
またはそうでないかもしれません。たぶん、Luaは参照によるパラメーターの受け渡しをサポートしており、私は単に次のように呼び出すことができます。
ParseTheThing(table, name, value);
--Core checking function
function ParseTheThing(table, name, value)
if (CheckSomething(name, value))
table[name] = value
end;
end;
コードをリファクタリングした場合、Luaのガベージコレクターはさらに多くの作業を強制されますか?
注:
- 質問で使用されている簡略化された例と、私が尋ねている質問を混同しないでください。
- メモリ使用量やコレクションの数を測定する方法がないため、試すことができません。