Unity Reserved Total Mono大量增加

本文主要探讨了Unity游戏中,Mono内存中的ReservedTotalMono值异常增加的问题。通过检查对象释放、资源管理以及内存碎片,作者发现大文件加载可能导致内存碎片,特别是Navmesh等大文件。通过删除Navmesh并监控内存状态,找到了问题源头——加载1MB二进制文件导致的内存碎片。最终,通过预加载文件来避免运行时内存碎片,成功解决了问题。同时,提出了对于场景切换和对象创建可能归属场景的疑问。
摘要由CSDN通过智能技术生成

症状: UsedTotal的Mono内存不变.但是切换场景时.有时候Mono会自己申请内存.导致ReservedTotalMono过高程序异常.

1.检查过所有new的对象.看有没有释放.没有问题.

 构造析构中给一个静态变量去增减.运行时这个值基本保持在一个范围内.确定了没有大量内存泄漏.

2.unity运行时资源检查.看是否有资源未释放.

所有assetbundle也计数.load的时候+1.unload的时候-1;运行时也没发现这个值无限增高.

profiler的memory采样.也没发现有资源未释放.

3.是否在加载大文件导致内存有碎片,

询问了下uwa群中大佬.大佬认为可能是内存有碎片,

项目中大文件有Navmesh,还有几个图集.比较大.图集缓存下来.游戏生命周期不去卸载它.mono也还是涨.

将navmesh删除测试.场景来回切换.mono不增加.

 

我们项目是大场景.寻路网格有几十MB.导致了内存碎片.影响了mono大小.

如果你也碰到ReservedTotalmono一直涨但是usedTotal正常.可以看看是不是也有大文件在加载和释放.

 

当我以为解决的时候.实际并没有解决.我也测试过不做任何事情在各个场景来回切.ReservedMono是不会涨的.

这个问题一直在困扰我,有空就检查这个问题.仔细观察了就是打开过各种界面,经历过战斗,然后切换场景.场景加载完成时产生了问题,然后使用了终极方案.切场景时.每个函数后面调用一下:

public static void LogMemory(string msg)
        {
            long usedb = UnityEngine.Profiling.Profiler.GetMonoUsedSizeLong();
            long Heapb = UnityEngine.Profiling.Profiler.GetMonoHea

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值