5

最近行ったコード レビュー中に、lua コードの一部に関する質問が出てきました。問題のコードは、キャッシュをフラッシュし、いくつかのデータで再初期化しています。

for filename,_ in pairs(fileTable) do
    fileTable[filename] = nil
end

-- reinitialize here

上記のループをこれに置き換えてはならない理由はありますか?

fileTable = { }

-- reinitialize here
4

3 に答える 3

0

新しいテーブルの割り当ては、Lua ではコストのかかる操作です (これは、ほとんどすべての動的言語でのオブジェクトの割り当てに当てはまります)。さらに、新しく作成された GC を常に "失う" と、GC が実際に要求するようになるまで、作成されたすべてのテーブルがメモリ内にあるため、パフォーマンスとメモリに負担がかかります。

あなたの例のテクニックは、これらの欠点をテーブル内のすべての要素を明示的に削除するのに必要な時間と交換します。これは常にメモリの節約になります。要素の量によっては、多くの場合、パフォーマンスも向上します。

于 2013-04-26T15:24:23.860 に答える