creator2.4.3 资源释放,内存无变化

资源释放了个寂寞?还是我姿势不对

newSpi:通过cc.resources.load加载一个spine资源,缓存模式用的PRIVATE_CACHE,所以没加载一次,内存会增加一次
clear:就一行代码 cc.resources.releaseAll() ,使用cc.assetManager.releaseAll()也是没卵用

demo:assets.rar (2.3 MB)


也试过通过addRef和decRef来释放,但内存还是不减少,好迷啊~~~~搞不懂。。。

我有个问题,,,垃圾回收不是需要等到内存到一定峰值才会执行么? 否则内存不会减少啊?

是定期回收的

木有大佬技术支持一个么~~

这个看到的是 js 对象占用的内存,你看看浏览器任务管理器图片缓存和gpu内存有没有变化

1.图片缓存是在NetWork里面看的吧,是没有移除的
2.这个gpu内存在哪里看呢,我不知道
3.多的这部分js对象占用的内存,也就是spine相关的一些数据呗,按理也应该通过GC释放掉啊

右侧的内存快照,我开始打了好多个,这三个是留的最后稳定下来的结果。也应该是进行了GC之后的

骨骼动画占用的内存的和资源没太大关系
是PRIVATE_CACHE 和 SHARED_CACHE 下sp.Skeleton会有一个SkeletonCache

destroy骨骼动画所挂载的节点 或者移除sp.Skeleton组件 它所占用的内存就会被释放了

比如这样:

let spiNode = this.node.getChildByName(`ntrA`)
spiNode.destroy();
cc.resources.releaseAll()

image
image

还真是destory就释放掉了,那cc.resources.releaseAll()是干了啥呢?我看NetWork里面,加载的纹理还在啊。

PRIVATE_CACHE 模式可以释放
SHARED_CACHE 模式无法释放…


你可以打印查看这个 cc.assetManager.assets

关于资源释放具体干了啥可以看这个: Cocos Creator 新资源管理系统剖析【四:资源释放】

感谢老铁,我今天得空再试试

我记得垃圾回收是浏览器自行触发的 我们无法手动执行垃圾回收。 如果浏览器没有执行垃圾回收, 那么我们无论怎样资源还是在内存中呀?

又测试了下,destory对 PRIVATE_CACHE 模式才有效,对SHARED_CACHE模式没卵用啊~~

游戏里面小怪用的都是 SHARED_CACHE 。

this.node.getChildByName(ntrA).destroy();
this.node.getChildByName(ntrA).removeComponent(sp.Skeleton);
this.node.getChildByName(ntrA).getComponent(sp.Skeleton).skeletonData.destroy();
cc.resources.releaseAll()

内存纹丝不动,我真不知道该怎么释放了~~

现在解决了吗?我现在也是这个问题

我2.4.5也遇到这个问题, 动态加载的预制体destroy() 内存不减少, 2.2.2一直都是这样做没问题的。

destory 是下一帧才销毁的 你马上释放 可能还处于被占用中 可以延迟3秒测试一下