私はLuaのテーブルの使用状況に関するメモリリークの問題があり、コードは以下の通りです:Luaテーブルのメモリリーク?
function workerProc()
-- a table holds some objects (userdata, the __gc is implememted correctly)
local objs = {createObj(), createObj(), ...}
while isWorking() do
-- ...
local query = {unpack(objs)}
repeat
-- ...
table.remove(query, queryIndex)
until #query == 0
sleep(1000)
end
end
テーブルobjs
は、一部のユーザデータオブジェクトで初期化されており、これらのオブジェクトはありませんので、GCがするwhileループで常に利用可能ですこれらのオブジェクトに対して実行されます。 whileループでは、query
テーブルは、objs
(アンパック関数を使用)のすべての要素で初期化されます。スクリプトを実行している間、私はメモリが増加し続けていることを発見しましたが、私がコメントするとlocal query = {unpack(objs)}
が消えます。
私はこのコードにメモリリークの問題があるとは思わないが、query
varはローカルであり、whileループの各反復後には使用できないはずですが、実際はそうです。メモリがそのテーブルで飲み込まれた理由を知っている人は誰ですか?
ありがとうございます!より良い方法は、内側のループからクエリテーブルを移動することです。 – Kery