内存释放问题,依旧是一个头疼问题

求问这个内存占用的图是用什么显示出来的?chrome么?

就是这个啊

as和xcode

用 as简单看了下内存情况,加载图片然后释放掉,再gc没有,内存占用只释放了一点点,如果切换场景之后再gc,基本是释放掉了(这一轮操作下来,实际上还是又0.几m的内存没释放掉,后面继续加载->释放->切场景->gc,每次内存都会涨个0.几m)

只切换场景,内存再慢慢的涨,我这里看到的每次切换大概上涨0.5m左右

怎么通过uuid获取图片名称?

同求,我把自己得体会画了个图。开发环境1.9.3,内存调试xcode+iphone5s
过程:
1.调用cc.loader.release之前,比方一共有3个资源文件。

2.调用cc.loader.release之后,从cache中释放出去,但是并没有实际从内存中销毁。

3.调用了cc.sys.garbageCollect()

小结:
1.cc.loader.release之后物理内存可以有两种情况降低:
a.调用cc.sys.garbageCollect(),该方法可以把内存清理到最低;
b.等待一定时间,该时间比较玄,无法预计。
2.cc.loader.release并没有实际释放物理内存,此时立即再去调用cc.loader.loadres,因为_cache内已经没有对应url的资源了,就会开辟新的内存加载资源。导致内存叠加上去。实现此场景用了两个方法:
a.新建两个场景,场景甲、场景乙,勾选自动释放资源。甲场景内放置一定数目的图片,以及一个切换到乙场景的按钮。乙场景内放置一个切换到甲场景的按钮。不停互相切换,会导致内存堆积过高然后闪退;
b.楼主所说的方法。
改进意见:
1.手动调用cc.sys.garbageCollect能够缩短时间,在低端千元安卓机上卡死3秒左右,对留存有一定影响。
2.自动回收有个明确规则,便于开发人员进行设计。

最后,当前项目进出战斗场景都手工调用了一下cc.sys.garbageCollect,卡顿感极度不舒适,哪位大哥有好的解决方法可以联系我下,qq399560206,不胜感激。

1赞

简单的做法。对象池。
复杂的做法。均衡用量。算法内能不创建就不创建对象。比如0点的Point。不用每次都new一个新的。临时使用的数组能不创建就不创建。能用基本型表示的内容。尽量不用对象(比如用x:Array y:Array来代替Array)

没有创建就没有回收。在不能手动控制释放的情况下。最适合常规项目的做法就是对象池。你的问题可以拆分场景内的单元缓存共用部分。
以前Flash可以用过 hack方法强制调用内存回收。js我就不知道有没有这样的办法了(估计没有,浏览器都不统一)。

1.9.3确实是内存释放问题,就拿图集来说,就没有正常释放。另外来回切换场景等操作可能会导致内存不断增加。
修改建议:
1:在js引擎层添加资源的引用计数。 被使用就加1,释放就减1。如果为0,就释放。
2:讲释放交给了引擎层去做,游戏的逻辑层只需要把需要释放的资源放入引擎层的一个容器里。
在每一帧的,引擎会去判定这个容器是否有需要是否的东西。
我们在这里加了一个条件,当前没有正在加载的资源。由于正在加载的时候,你当前释放的资源可能就是需要被加载或者
加载中的资源的依赖资源,为了避免这个情况,我们在这里做了判定。相关的判定也可以从js引擎中寻找对应的判定条件

上述的修改,在ccloader.js相关的文件夹下,是有关加载流程相关的文件

修改后大致如此:
var a = cc.loader.getDependsRecursively(b) //获取b资源的所有依赖资源
a = cc.loader.putNeedReleaseList(a);

2赞

2.0.8关于内存的控制,不如1.9.x的版本。基本相同的项目,内存占用翻倍

1赞

打扰各位大佬我发一个广告
海外手游公司招聘 cocos creator,
初级 薪资范围 18-25K
高级,薪资范围 30-60K
公司包吃,包住,工作10小时,周末单休
微信 rubyleying000000

单原生么?h5上也这样么?

能否加个qq,指导一下怎么做相关处理。

如果有共用资源的情况下就会报错了

这种情况,计数已经加1了的。被引用几次就加几次,没有被引用的时候减去次数。所以,公用资源也不会报错。

问下 如何获取场景里静态引用的资源, 而不是 动态加载的资源。

请问这个看内存监控的是什么工具?

这个静态我有点不理解。
是非动态的意思? 常驻节点下的资源 + 场景主动加载的资源(包含依赖资源)?
还是单纯的 常驻节点的资源?

@huanxinyin 1.8.2版本,拿35楼的demo在安卓机测试,启动时内存6m多,gc后5m多,切换场景后加载图片9m多,卸载图片后9m多,gc后还是9m多,继续切换场景持续在9m多。涨了3m内存一直降不下去