Lua Table 通常被用来存储游戏的配置数据,如果配置中有很多冗余重复的数据那么将占用较多的内存,严重影响加载速度
Lua table commonly use to store configuration data for games. it takes a lot of memory if it contains many fields with same value. this optimization could improve memory usage and loading speed.
- 获取字段中使用最多次数的值作为默认值,并且删除默认值字段
- 使用了非ASCII字符集字符的字段被视为需要做多语言化处理并提取替换成特殊标识符
- 唯一化所有的子table,并且指向同一个引用,以节约内存
- remove default value fields ( store them into metatable )
- auto localization
- reuse all table values to save memory
- The key of root table must be all string or number type
{{1, 2, 3, a="123", b="123" },{1, 2, 3, a="123", b="123" },{1, 2, 5, a="123", b="123" }, [9] ={1, 2, 5, a="123", b="123" }, [11] ={1, 2, 3, a="123", b="123", c={{1 },{1 },{2 },{2 } }, d={{1, a=1 },{2, a=2 } }, e={{1, a=1 },{2, a=2 } } }, [100] ={1, 2, 3, a="tttt", b="123" } }local__rt_1={} local__rt_2={1, 2, 3 } local__rt_3={1, 2, 5 } local__rt_4={{1, a=1 },{2, a=2 } } local__rt_5={1 } local__rt_6={2 } localtest={__rt_2, __rt_2, __rt_3, [9] =__rt_3, [11] ={1, 2, 3, c={__rt_5, __rt_5, __rt_6, __rt_6 }, d=__rt_4, e=__rt_4 }, [100] ={1, 2, 3, a="tttt" } } local__default_values={a="123", b="123", c=__rt_1, d=__rt_1, e=__rt_1 } dolocalbase={__index=__default_values, __newindex=function() error( "Attempt to modify read-only table" ) end } fork, vinpairs( test ) dosetmetatable( v, base ) endbase.__metatable=falseendreturntest