Version: 1.3
语言 : 中文
Shader内存优化
绘制优化

Remapper内存优化

引擎会给内存中的每个对象都会分配一个唯一的heap ID,称为Instance ID。 在未优化前,该ID满足以下机制:

  • 对象的Instance ID 不会为0;
  • 从序列化文件中加载出来的对象,其Instance ID为正数,从代码中通过构造的对象,其Instance ID为负数;
  • 新的对象产生时,Instance ID 每次递增2(负数则减2);
  • Instance ID只增不减,不会被复用;
  • 同一次启动中,对象的Instance ID始终不变,即使该对象被重新加载过。

Remapper是引擎内部用于保存对象的序列化ID和加载后的Instance ID之间双向映射关系的一个数据结构。当游戏使用到的资源较多时,游戏运行过程中 remapper就需要维护两张比较大的数据表,占用不少的内存。极端情况下,Remapper的内存占用能达到80MB或更多。

Remapper内存优化通过修改以下行为方式,大幅降低了remapper的内存占用:

  • 通过增加版本概念,复用已有的Instance ID;
  • Instance ID 每次递增改为1;
  • 使用内存紧凑的数据结构代替原有的哈希表。

经测试,在一款小游戏上优化后的remapper内存占用由原来的2MB,降低为1MB。

优化前
优化前
优化后
优化后
Shader内存优化
绘制优化