Unity优化杂谈2(MONO内存)

Mono内存是Unity中不会释放的内存,他的容量一旦被撑大,项目所占的内存就会跟着增大,不能手动释放。是一个比较危险的地方,wetest给出的标准是峰值不要超过50M,wetest里面会有最大的top50的占用信息,里面有一些重复,但是也可以根据这个确定需要优化的内容,并且从中找到关联的一些问题。

Unity优化杂谈2(MONO内存)_第1张图片Unity优化杂谈2(MONO内存)_第2张图片

根据我这里面显示mono里面主要为:(具体项目具体分析)

1.    protobuf所存的表格的数组信息

2.    uidrawcall的数组队列信息

表格这块的问题:

1.mono内存问题,是表格的结构和设计不合理,存在大量冗余字段和空字段。解决方案为根据自己项目逻辑拆分大表,并删除冗余和无用字段,效果明显。tips:之前几个项目都是缓存部分表,之后用到那张表加载那张表,所以拆分表有利于提高记载速度,但是具体项目具体分析)

2.GC问题,是protobuf所生成的,在项目里面以TXT形式存储数据,在使用时,需要先将txt读取到数组当中,在读取TXT时会产生大量的GC,造成一定的卡顿。(我们当时100K的表会产生1M以上的GC,可能是解析处理的问题,但是后来直接吧这个机制换掉了,没有做深研究,不做介绍了。)最后换成将表格存储在对象上,需要用的这个表就实例化表格对应的对象。

3.表格数量问题,我们当时最大138张表,其中好多表格都为几个字段,1K一张表,还有一些开发过程中临时表。相关表格合并,用字段区分。

4.字典表过大,因为多语言版本最初把其他语言版本配置在一张表中,方便使用。之后把生成和读取的地方做修改,根据语言种类生成N张表,最后只读取一张表。

最后随着项目的增大,数值必然会增加,无需纠结最大值合适自己项目的才是最好的。我们改完之后就可以接受了。

Unity优化杂谈2(MONO内存)_第3张图片

你可能感兴趣的:(unity优化)