最近行ったコード レビュー中に、lua コードの一部に関する質問が出てきました。問題のコードは、キャッシュをフラッシュし、いくつかのデータで再初期化しています。
for filename,_ in pairs(fileTable) do
fileTable[filename] = nil
end
-- reinitialize here
上記のループをこれに置き換えてはならない理由はありますか?
fileTable = { }
-- reinitialize here
最近行ったコード レビュー中に、lua コードの一部に関する質問が出てきました。問題のコードは、キャッシュをフラッシュし、いくつかのデータで再初期化しています。
for filename,_ in pairs(fileTable) do
fileTable[filename] = nil
end
-- reinitialize here
上記のループをこれに置き換えてはならない理由はありますか?
fileTable = { }
-- reinitialize here
新しいテーブルの割り当ては、Lua ではコストのかかる操作です (これは、ほとんどすべての動的言語でのオブジェクトの割り当てに当てはまります)。さらに、新しく作成された GC を常に "失う" と、GC が実際に要求するようになるまで、作成されたすべてのテーブルがメモリ内にあるため、パフォーマンスとメモリに負担がかかります。
あなたの例のテクニックは、これらの欠点をテーブル内のすべての要素を明示的に削除するのに必要な時間と交換します。これは常にメモリの節約になります。要素の量によっては、多くの場合、パフォーマンスも向上します。