辛苦啦 加油 期待
加油,我也等着官方解决内存这个问题。
好消息各位,问题解决了,一会就提交上去,1.3 应该也会发一个 hotfix 版本
终于等到今天~~~~哈哈哈哈!!!就坐在这等!!
什么时候发布啊
PR 整理已经完毕,会合并到下一个版本的 1.3 中,如果立刻想要尝试,需要合并这两个 PR 并手动重新 build。
https://github.com/cocos-creator/cocos2d-x-lite/pull/363
https://github.com/cocos-creator/engine/pull/1231
这个修改提供了一个新的 API:
cc.loader.getDependsRecursively:用于获取某个资源的所有依赖资源
同时修改了 cc.loader.release 让他可以真正释放资源。
下面是一些范例代码:
// Release a texture which is no longer need
cc.loader.release(texture);
// Release all dependencies of a loaded prefab
var deps = cc.loader.getDependsRecursively('prefabs/sample');
cc.loader.release(deps);
// If there is no instance of this prefab in the scene, the prefab and its dependencies like textures, sprite frames, etc, will be freed up.
// If you have some other nodes share a texture in this prefab, you can skip it in two ways:
// 1. Forbid auto release a texture before release
cc.loader.setAutoRelease(texture2d, false);
// 2. Remove it from the dependencies array
var deps = cc.loader.getDependsRecursively('prefabs/sample');
var index = deps.indexOf(texture2d._uuid);
if (index !== -1)
deps.splice(index, 1);
cc.loader.release(deps);
请问1.3.1里面已经修复这个问题啦没?
1.3.1-beta.1 测试版里包括了楼上 panda 说的修改,请测试一下是否解决了你的问题:
http://forum.cocos.com/t/cocos-creator-v1-3-1-beta-1-win10/40767
哥们,我早上测试了一下1.3.1,貌似还是有问题,但是情况不同了,1.3.1只有第一个加载的内容释放不掉,再次加载的内容可以释放掉,具体如图:
启动空场景内存情况:
第一次加载prefab内存情况:
第一次release内存情况:
第2次加载prefab内存情况:
第2次release内存情况:
情况就是这样,也就是说首次加载的内容没有释放,后面重复加载的可以释放!!不知道我说清楚了没有
内存的变化时这样的回不到初始内存:
麻烦对比一下下面的 PR,看看你的原生项目中的代码是否正确
https://github.com/cocos-creator/cocos2d-x-lite/pull/363
有可能是你没有删除原来的项目,在这种情况下,我们不会替换你的 native 引擎,需要删除之后,重新构建
p.s. 题外话,每次看到你们发帖子里面各种感叹号真的挺瘆人的。。。
感叹号慎用啊。。。其实我也有这个感觉,一般都不用
好吧,我不用感叹号了,哈哈。刚查看了原生项目代码,没有问题,我都是删除了build目录,然后才构建的,代码我也对比了,是你修改后的内容,但是情况就是我上面说的那样,你用我之前给你的demo一试就出来了
这个是垃圾回收的延迟效应,在内存压力不大的情况下,不会主动去回收垃圾,你可以在场景中做一个按钮调用 cc.sys.garbageCollect,在释放之后,多按一次按钮,就可以回收掉了。
嗯,测试了确实是这样可以释放了,辛苦了。不过内存还有一点点的泄漏。每次还是会上涨一点点,不多,但是会一直累加。应该影响不大
需要理解的是,JS 环境中的垃圾以及空闲内存对于 Xcode 来说,也是 App 实际占用的内存,因为这部分内存是由 Spidermonkey 持有的。但是这并不是内存泄漏,基于同样的原因,用 Xcode 的 leak 工具来查看包含 Spidermonkey 的项目也会遇到误判。
这个看内存CPU的软件叫啥子,感觉非常有帮助!!
xcode native项目可以这样看
release这个在今天发布的1.3.1beta1里有包含了吗? 我这里测试内存还是只涨不减。
已经包含了,想要控制内存还需要做两件事:
- 场景依赖的资源需要勾选场景的自动释放资源选项
- 动态加载的资源自己去 release : http://forum.cocos.com/t/topic/40557/47
我这边使用 var deps = cc.loader.getDependsRecursively(assets);
cc.loader.release(deps);后发现会把还在用的纹理也给干掉了。 这个难道要手动去排除所有纹理吗





