症状: 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