Version: 1.7
语言 : 中文
Shader 内存优化
Dotnet Wasm 方案

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 内存优化
Dotnet Wasm 方案