开启streaming,加载资源时STAT_AsyncFileMemory持续上升,完成后,静止不动依旧不会下降

我们项目在2G内存的手机(Android&iOS)上 开车移动或触发levelsequence有大量资源的加载,容易发生崩溃。

经分析后,在开启streaming的时候,STAT_AsyncFileMemory 会增长的比较厉害,且不会下降。很容易涨到200多M。

另外我们测试STAT_AsyncFileMemory 涨上去之后,静止一段时间,没有资源加载之后,它的内存仍然不会下降。

请问下这种情况是bug吗?应该如何解决呢?

<br/>

另外,我在网上找了一些帖子,比如 刘炜 回复的 [Content removed]

找了一些开关并进行测试。测试结果如下

pakcache.Enable pakcache.UseNewTrim pakcache.MaxBlockMemory pakcache.TimeToTrim pakcache.EnableNoCaching测试1

pakcache.Enable = false。能降低pakcachehighwater的内存,无法降低STAT_AsyncFileMemory 的内存。仍然会崩溃。

测试2

pakcache.MaxBlockMemory=20 && pakcache.TimeToTrim = 1.5 对STAT_AsyncFileMemory 没有优化作用

测试3

pakcache.UseNewTrim=1 && pakcache.EnableNoCaching=1 && pakcache.MaxBlockMemory=20 && pakcache.TimeToTrim = 1.5 对STAT_AsyncFileMemory 没有明显优化作用。

测试4 关闭streaming

r.streamingtexture 0 && r.streaming.poosize 20 && r.streaming.poolsizeformeshes 20

STAT_AsyncFileMemory 降低至个位数,但是StaticMesh、Texture显著增加。

<br/>

<br/>

Hi,

我个人觉得这不是bug,只是内存持续在加载,PackageCache会有些内存的cache,但应该不是大头,通常要释放内存,需要先gc,释放掉没有引用的Object,以及FMemory::Trim,释放掉allocator里的缓存。

另外可以开启Texture的LRU以及PSO的LRU,这样可以相对控制内存占用。

好的,感谢答复,我现在发现在挂机状态 STAT_AsyncFileMemory和 STAT_SkeletalMeshVertexMemory持续上涨到几百M崩溃。我不确定上面的表现跟这个异常现象有没有关系。

我先解决完挂机持续上涨的问题,再回头按您说思路继续看按STAT_AsyncFileMemory内存高的问题。

Hello,SkeletalMeshVertexMemory持续上涨是统计的错误,FSkeletalMeshLODRenderData::IncrementMemoryStats 和 FSkeletalMeshLODRenderData::DecrementMemoryStats中二者统计的到memory是不一致的。

另外,我看了下STAT_AsyncFileMemory持续上涨的问题,GC后是不下降的。从memreport中看增长的meshobject 、allocator memory、physics memory 很少,无法覆盖STAT_AsyncFileMemory增长的量。

我怀疑STAT_AsyncFileMemory 也有统计的问题,你们有相关的信息吗?

STAT_AsyncFileMemory的内存统计也有问题,正常来说只有几M。 UE5中已经fix了。

是的,抱歉回复的很晚。