资产工作流

资产的释放

为了避免重复加载资源,当资源被加载完成之后,会被缓存在 ResourceManager 内。缓存本身会占用内存和显存,当开发者不再需要缓存的内容时,需要手动去释放缓存的内容。

注意:资源之间是相互依赖的。

例如下图展示的实体包含 MeshRenderer 组件,依赖于 MaterialMaterial 可能被多个 MeshRenderer 引用,如果释放 Material ,那么引用此的其他 MeshRenderer 则会找不到该 Material 而报错。

image.png

注意:JavaScript 无法追踪对象的引用。 一般在 JavaScript 等弱类型语言中,是没有提供给开发者内存管理的功能的,所有对象的内存都是通过垃圾回收机制来管理,你没有办法去判断对象什么时候会被释放,所以没有析构函数(destructor)去调用引用资源的释放。

ResourceManager 提供了一套基于引用计数的资源释放,需要开发者手动调用 gc

engine.resourceManager.gc();

验证资产释放

如果您需要验证资产是否释放成功,可按照以下步骤,在空白页打开以下示例:

该示例在初始化时会通过创建 Texture2DSprite 渲染 2D 精灵,当点击右上角 GC 按钮后,root 节点被销毁,纹理和精灵资产的引用计数都被清空,此时这些资产会被真正销毁,分别在 gc 前后拍摄内存快照可以更直观地感受这个过程

  1. gc 前: 开发者工具 -> 内存 -> 拍摄堆快照
  2. gc 后: 开发者工具 -> 内存 -> 拍摄堆快照 -> 比较 -> 选择 gc 前快照
image-1 image-1
最后更新于 七月 11, 2024

这篇文档对您有帮助吗?

On this page