使用wkwebview在 ios13.6的版本上跑一直有内存泄露

我的这个Demo 我是直接在macOS BigSur 版本11.6自带的 safari测试过的 刚进界面 1个场景+1个背景图+3个按钮内存已经达到110M ,3个界面打开关闭 打开关闭 来回切换 后,内存大概会保持 在160m -180m 无法释放到110M,但cc.assetmanager.assets的数量是恢复了

希望大佬继续跟进一下

有在查,之前以为是指内存会不停上涨,理解错了

感谢大佬 :grinning:

大佬,目前是什么情况,是否有找到问题所在,因为这个问题比较严重,影响游戏上线。。 :joy:

目前排查的情况内存占用:

  • v8 对 js 代码优化后所占用的固有内存;
  • 引擎一些对象池的缓存数据;

从这个 demo 看,目前没有发现内存一直上涨的情况。

因为如果是这种节奏如果是界面打开多的情况下,每个界面都残留一些内存的话,机子的内存撑不住,这个只是demo,正式的界面 使用的资源更多。
那意思是可以恢复到打开界面之前的内存吗

那部分内存是一般是不会去释放的,正常不会一直有残留,对象池内会回收多余的数据,可能和你们项目遇见的问题不一样。

10多分钟也释放不掉,内存会一直在,demo项目中 内存也是10分钟了 内存一直保持在160-180,无法回到110M,我们的项目中就是打开界面 较多,内存每个界面 泄露一点,一直无法释放。。内存最后就超标了

那就是我的demo中所展示的 110M内存-180M内存 ,其中70M内存是合理需要才遗留下来的

这个内存问题是否是ios自身机制问题,如果确实如此只能放弃web端,改为原生,我也只想得到一个引擎组的官方回复

你们这个问题有解决吗

demo中的内存泄露70M如果不是引擎的问题,是IOS的缓存机制,并且无法修改,我就直接出原生了

你好,请问有办法解决吗?我的项目资源很大,在wkwebview跑几分钟就会黑屏,应该是和你一样的问题。

若断定 demo中 的遗留的70m内存属于 * v8 对 js 代码优化后所占用的固有内存; * 引擎一些对象池的缓存数据;那无法修改的话,麻烦回复一下,这里好确定方向

方便用 3.5.2 测试下?3.5 有修过有关内存的,比如3d 粒子;
对象池里的数据要看是正常的,还是不正常的,如果对象池里数据不稳定,一直在增加,那就是有问题。
你可以看下 ContainerManager.ts 下里面的 pool 下的数据的变化情况。

好的,我试试

无任何效果,而且还发现一个在safari浏览器下 GFX Buffer Men(M)GFX 缓存 也不会释放 应该和spine有关

同上,降低引擎固有内存的方法。
其中 CanvasPool 的数量可以通过项目设置中的 Macro Comfigurations 设置 MAX_LABEL_CANVAS_POOL_SIZE

另外修改 container-manager.ts 中的代码为如下,可以减少一部分 JS 内存:

同样的,修改 recycle-pool.ts 中的代码为如下,也可以减少一部分 JS 内存(此处的长度设置为 4 ,仅测试过本帖提供的 demo 、引擎自带的快上车 3D 案例和 Spine 测试例中测试通过。如果遇到复杂场景,可能需要增大此数值。不可低于 4 ):

在 Object.ts 中,添加 number 和 boolean 类型置空。

开启 CleanupImageCache 的,避免缓存纹理内存。(注意会导致自动合图失效)

剔除非必要的引擎模块,也能大幅降低游戏 JS 内存。

其余部分的内存占用暂时没有优化方案。

2赞

其他引擎在wkwebview上貌似也无法释放内存,看来只能减少游戏整体内存消耗,看来是IOS wkwebview机制如此,不适合跑一些大型游戏,只能跑小游戏,在本身内存消耗小的情况下 不释放 也无所谓了。低端机iphone7 运行内存只有2G,wkwebview内存不释放达到1G时候 就会crash,高端机内存大也能跑

1赞