基础和工具

日志

常规用法

参考手册

最佳实践

发布最终版本时选择打印合适级别的日志

日志的打印极其影响 CPU 时间且带来大量内存分配,故发布最终版本时,可以考虑仅打印错误以上级别的日志,甚至屏蔽所有日志。

基础和工具 - 第1张  | Game Framework

为了完整地屏蔽掉日志开销,在书写日志时需注意格式,这里以开启仅打印错误及以上级别日志为例。

日志参数数量尽可能不要超过 3 个

日志参数超过 3 个(≥4)时,将会生成可变参数数组,导致额外的内存分配。

常见问题

打印日志后,控制台没有输出

为了兼顾发布后的性能,日志的开启是通过宏定义控制的,新工程中默认不包含任何日志宏定义,故没有日志输出。需通过以下菜单项,根据需要开启相应级别的日志。

基础和工具 - 第2张  | Game Framework

引用池

为了降低因大量产生类对象而导致的堆内存碎片和分配时间开销,设计了引用池的概念,来将用完的对象清理并缓存起来,供后续使用。

常规用法

定义引用类

只有引用类才能使用引用池,若要定义引用类,定义为 IReference 接口,并实现 Clear 方法。

从引用池获取引用

将引用归还引用池

向引用池中追加指定数量的引用

从引用池中移除指定数量的引用

注:如果引用池中剩余数量少于指定数量,会清空引用池,并不引发错误。

从引用池中移除所有的引用

清除所有引用池

获取引用池的数量

参考手册

最佳实践

对频繁生成的对象,使用引用池

对频繁生成的对象,使用引用池能够显著减少新对象的内存分配。

在引用类中定义静态 Create 方法

建议在引用类中定义静态的 Create 方法,将 Acquire 操作封装起来。如在 ReferenceExample 中定义以下方法,方便外部使用。

常见问题

获取对象且使用完成后,忘记归还对象或者归还时机不正确

注意 Acquire 一定要在合适的时机 Release。

泛型类的 Clear 方法实现不完整

使用引用池技术的对象是会被复用的。当回收某个对象时,不完整的 Clear 实现无法清理干净对象中的数据,进而将脏数据带到下一次复用对象的逻辑中去,这可能导致难以追踪的 BUG。