关于释放内存的问题

内存释放这块一直没太明白,之前说1.5之前,动态加载的,releasRes不能释放,所以一直等1.5版本,今天升级到1.5.1b3版本,动态加载的还是没有释放,


这个图说不会释放内存的贴图,但是切换了场景后,很多贴图都不用了,应该如何释放?
释放内存这块感觉还是有点问题,或者有没有专门讲解的文档?

希望能有一个专门的帖子或者文档的一章还描述内存管理.

难道是释放方式不对?可以指点一下么~

你截图的这篇文档里面说了如何释放啊,你是怎么做的

加载
cc.loader.loadRes(data.path, cc.Texture2D, function (err, asset) {
self._pngs[data.path] = asset;
});

释放
for (let path in this._pngs){
// let deps = cc.loader.getDependsRecursively(path);
//cc.loader.release(deps);//这个释放不了
// cc.loader.setAutoReleaseRecursively(path,true);//加上这个也没有效果
cc.loader.releaseRes(path, cc.Texture2D);//这个也不行
cc.loader.release(this._pngs[path]);//也不释放,这些都打开也不行。。。
}
上面释放的方法都试过了,
内存没有一点改变,有时反而增加了。。。
现在使用releaseAll都不怎么释放了。。。

1赞

给我一个工程吧,我看看怎么回事。

另外,如果是原生的话, 你这样做的确释放不了,因为尽管 release 了,但是 texture asset 还被保存到你自己的 _pngs 对象里面了,意味着 texture 仍然被持有,无法被 GC,也无法释放它引用的内存及贴图存储。更严重的是,loader 中的引用的确被释放了,所以重新加载同一个资源的时候,会再加载一个新的 texture 对象到 loader 中,造成了内存的增长

看着论坛的一堆堆问题,关于内存这部分说两句:

现在这种内存释放机制,初衷是好的;
但在实际项目中,要真正做到JS脚本不需要考虑内存管理,淡何容易;
搞到现在:还是要考虑,还多了一堆坑;不上不下,开发者难受,引擎组也难受;
骑虎难下,阿门…

测试工程已发送

发哪里了?
另外,你们是 native 环境还是 web 环境?

发到私信里了,native环境的

看了一下你的项目,应该就是我说的问题,你把所有 loadRes 得到的 texture 全部都放到 _animationPngs 对象下了,导致无法被释放,你在 release 的同时还要 delete this._animationPngs[path];。如果仍然无法释放,也有可能跟我们 1.5.1 修复的一个问题有关系,可以尝试一下 1.5.1 beta 版本,应该是可以正常释放的

刚试了下,1.5.1b3版本,内存还是没有释放,
delete this._animationPngs[path]; 这个调用了也没有效果,
内存还是跟之前一样的,没有降。。
在mac下真机调试的,native下

你在释放之后等待了多久?可以主动调用 GC 来看看是否可以释放

cc.sys.garbageCollect();

主动调用确实可以降下来了,不过要多调用几次,谢谢谢谢~~~

还有一个问题请教一下,就是new / create 出来的 spriteframe,animation等对象,是自动释放么?应该如何释放?(因为new/create 出来的对象没有uuid )
还有,内存虽然再降,不过还是有一些降不下来。。

求问楼主图片的文章是在哪里的,想看

http://www.cocos.com/docs/creator/scripting/load-assets.html