引擎底层在反序列化脚本中字符串的时候,默认会创建新的字符串对象,当出现很多同名字符串的时候,开启使用字符串驻留池,会把字符串加载到字符串驻留池中,这样相同的托管字符串只占用一份内存。
在测试工程上,使用一个脚本中有10个不同字符串的Prefab,每帧在场景中实例化50个GameObject,这部分托管字符串的内存占用从1.4 KB降低到了114 Bytes。另外,使用驻留池加载字符串会有额外的CPU开销,在处理器为麒麟9000的机器上运行打包后的微信小游戏Demo,测得每帧500次反序列化调用的耗时从8ms增加到8.97ms。
在某MMO网游上,开启这个选项后游戏中UI的重名字符串内存占用得到优化,总共可以节省1.1MB左右的托管内存,而平均CPU占用率没有增加。
设置选项位于 Project Settings -> Player,Use String Intern Pool 默认关闭。