内存释放到底要怎么做

游戏有很多弹框,每个弹框使用prefab制作 。
游戏里使用loader.loadRes来加载prefab。
现在想在弹框关闭后释放弹框里包含的所有资源。

使用setAutoReleaseRecursively(prefab,true)。 在切换场景时资源会被释放。但弹框里有用到一些公共资源也被释放,会导致其他界面出现问题。:joy:

如果使用setAutoRelease(prefab,true)这样又只会释放prefab本身,图片资源是不会被释放的。

所以说,资源内存管理方面最好的做法到底是什么 :joy: 求官方给个教程啊。
很多人都有这方便的疑问吧。

:sob:

游戏也不大,资源才20多m,可小游戏上运行起来居然要用掉800多内存。ios手机上内存小的都运行不了。很惆怅啊。根本不知道内存用到哪儿去了。

我在chrome上进程管理器看过。游戏运行2小时 。内存占用500,gpu 270。 js 150左右。 为啥这么占内存啊,不知道占到哪儿去了。:sob::sob:

我讲一下思路吧 主要方案还是引用计数
资源分成 公共资源和动态资源
我们做的小游戏 400m 压缩完117m 这个策略完全没问题
1 公共资源在游戏开始加载 并记录下 获取依赖 都记录下来
2 游戏内容分层加载 打开一个层 要加载层的 所需的资源 计数++
3 释放时候 跳过公共资源 所需资源 计数 – 计数=0时候 调用 cc.loader.release

2赞

我现在遇到的主要问题是没有放到resources下的资源。 比如
公共资源 放在common/下
另外2个弹框放在 dialogs/invite dialogs/club下。
这2个弹框用到自己的资源也用到common下的资源。
当关闭invite时我想释放invite目录下的资源。
通过getgetDependsRecursively(invitePrefab)拿到的资源包括common下的。
但我没办法区分哪些资源是common下的。因为这里只能拿到uuid,是取不到原路径的。

如果资源全放到resources目录下,是有办法拿到路径的。

1赞

顶顶顶