unreal component 的坑 内存使用为何很高?

11 篇文章 0 订阅
6 篇文章 0 订阅

   当使用多个 component的情况.每添加一个,内存最终会增加1M 左右的 内存. 即使只是一个 正方体box. 这么耗内存的软件太可怕了. 岂不是1k个方盒子对象,那电脑直接就可能爆了? 不过话说回来,还得要解决下才好.

   1)使用的是develop 版本的unreal 所以不知道和这个有关否. 待定.

  2)直接定位代码找到消耗内存的地方.

 1 经过反复对比定位.定位到此函数运行后内存会增加很大FxxxSceneProxy::GetDynamicMeshElements(

在此函数直接返回.内存不变.

  2  每增加一个 section,内存增加很明显. 和顶点数量都无关; 将所有顶点放入一个section, 内存大大减少.

  3 不过就算是一个section,内存增加也很大. 反复跟踪代码未找到最终使内存增加的明显地方.即使GetDynamicMeshElements 函数完全运行调试到函数返回,内存也并未立即增加. 所以确定 是其他地方根据此函数的变量值,导致内存增加.

  4 再回到GetDynamicMeshElements 函数, 逐行排除可能导致外部变量修改的地方.最终发现

 meshBatchElement.PrimitiveUniformBuffer=

 CreatePrimitiveUniformBufferImmediate(pHostSceneProxy->GetLocalToWorld(), pHostSceneProxy->GetBounds(), pHostSceneProxy->GetLocalBounds(), true, pHostSceneProxy->UseEditorDepthTest());

  这个转换矩阵赋值运行后内存增加巨大.如果不运行此行,直接返回代码. 内存变化微弱.

   目前只是发现这里导致内存增加.到底为什么增加, 如何能不导致内存以M的数量增加.还待定位.

  解决办法:

1 在函数: GetDynamicMeshElements 中

   FMeshBatchElement& meshBatchElement = meshBatch.Elements[0];
                
                    ;
                    meshBatch.bWireframe = bWireframe;
                    meshBatch.VertexFactory = &Section->VertexFactory; //&pProxySection0->VertexFactory;//
                    meshBatch.MaterialRenderProxy =   MaterialProxy;
                    //continue; 这个居然导致内存大增.如何破? 这里创建一个就可以了.不要每个 section创建.
 meshBatchElement.PrimitiveUniformBufferResource = &((FMultiplexMeshSceneProxy*)pHostSceneProxy)->m_uniformBuffer;

//不能每次如此创建变换矩阵. 会导致内存暴涨. 而上面的使用方式可以降低数倍内存.
//meshBatchElement.PrimitiveUniformBuffer = CreatePrimitiveUniformBufferImmediate(pHostSceneProxy->GetLocalToWorld(), pHostSceneProxy->GetBounds(), pHostSceneProxy->GetLocalBounds(), true, pHostSceneProxy->UseEditorDepthTest());

 2 每个component 不能存在过多的 section, 应将相同的 材质作为同一个 SceneProxy 渲染需要的 section 组合数据点. 可以降低数倍的数据.

3/为何这两处会引起如此高.暂时没有时间定位


                   

 

                   
 

  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值