UE5 Profile 内存

UE5提供了多种内存分析工具,如memreport-full命令生成内存报告,详细显示物理内存和虚拟内存使用情况,以及UObject对象、纹理、静态网格、粒子系统等的内存占用。此外,UnrealInsights是一个独立的内存分析程序,支持实时监控和内存轨迹分析,帮助定位内存泄漏和过度使用问题。然而,它可能缺乏特定对象和地图路径的详细信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

UE5 提供了多种Profile内存(Memory)的手段。

memreport -full

在cmd命令行输入 memreport -full

内存报告文件会输出到Saved\Profiling\MemReports\XXX.memreport

用文本文件打开XXX.memreport

物理内存和虚拟内存相关信息

Process Physical MemoryProcess Virtual MemoryPhysical MemoryVirtual Memory
进程物理内存进程虚拟内存物理内存虚拟内存

标记使用内存

UE Allocator对分配的内存打特殊标记, 比如TEXTUREGROUP_Lightmap,TEXTUREGROUP_UI等等。

 

UObject对象数量和内存统计 

 最后一行算了Objects的总内存

ClassCountNumKBMaxKBResExcKBResExcDedSysKBResExcShrSysKBResExcUnkKB
UObject的类别数量

使用

内存

最大使用内存

其他ResExc的总和

专用系统内存中分配的字节数共享系统内存中分配的字节数在位置内存中分配的字节数
ResExcDedVidResExcShrVidKB
专用视频内存(VRAM)中分配的字节数共享视频内存(VRAM)中分配的字节数

RHI内存

RHI资源内存(比RHI内存更具体)

 SkeletalMesh的资源 Object对象数量和内存统计 

 StaticMesh的资源 Object对象数量和内存统计

 具体纹理对象内存占用(非VirtualTexture)

粒子系统占用内存 

.ini配置文件占用内存

RT池占用内存 

具体纹理对象内存占用

 StaticMeshCompoent占据内存Object对象统计

Unreal Insights--Memory Insights

文档在: 虚幻引擎中的Memory Insights | 虚幻引擎5.2文档 (unrealengine.com)

打开Unreal Insights

UnrealInsights.exe是一个独立Profile程序, 在 Engine\Binaries\Win64

 如果该目录不存在UnrealInsights.exe执行程序, 得在工程中构建

 打开显示: Live代表正在运行的进程

加执行命令参数启动Editor或者项目

 Trace分析

点击上面UnrealInsight的OpenTrace,打开捕捉信息

 LLM Tags

可以把想列表里想查看内存的对象类在左边的视图列出来

 Investigation

内存调查系统, 可以使用规则(大于某个时间点,小于某个时间点,在某两个时间点之间)来显示一段时间内分配而一直未释放的内存, 下面是查看从10秒 ~ 20s的内存变化(10s开始分配并且到20s的时候还未释放的内存统计

 

 这里点击Hierarchy每个alloc名字左边可以查看分配程序栈,内存大小,源文件等等:

 看了下感觉没中不足的是,缺乏信息,像Memort -full指令能指出一个object对象的具体名字和地图路径。

### Unreal Engine 5 的云内存预加载技术和实现 在云端环境中,Unreal Engine 5 (UE5) 提供了多种方法来优化资源管理和性能表现。对于内存预加载而言,主要目标是在不影响用户体验的前提下提前加载必要的数据。 #### 使用 Streaming Levels 实现高效的数据流传输 Streaming levels 功能允许场景中的不同部分按需加载和卸载。这不仅减少了初始加载时间,还使得大规模世界构建成为可能。当应用于云计算架构时,可以预先判断玩家可能会进入哪些区域并相应地准备这些级别的资产[^1]。 ```cpp // 设置要流式处理的级别名称 FName LevelToStream(TEXT("/Game/Maps/MyLevel")); ULevelStreamingDynamic* Streamer = NewObject<ULevelStreamingDynamic>(GetWorld(), NAME_None); Streamer->SetLevelName(LevelToStream); // 开始异步加载该级别 Streamer->bShouldBlockOnLoad = false; Streamer->ConditionalBeginLoadingLevel(); ``` #### 利用 FMemory 和其他 API 进行自定义缓存策略 除了内置的功能外,开发者还可以利用 UE5 提供的各种低级接口来自定义自己的缓存机制。例如 `FMemory` 类提供了丰富的函数用于分配、释放以及管理动态内存空间;而像 `IFileManager::Get().CachePath()` 可以为临时文件创建合适的路径以便快速读取写入操作[^3]。 ```cpp void PreloadAssetsInCloud() { // 获取当前使用的 IFileMananger 接口实例 auto FileManager = &IFileManager::Get(); FString CacheDir = FPaths::Combine(FPaths::ProjectSavedDir(), TEXT("CloudCache")); // 创建目录如果不存在的话 if (!FileManager->DirectoryExists(*CacheDir)) FileManager->MakeDirectory(*CacheDir, true); // 将远程服务器上的资源下载到本地缓存位置... } ``` #### 结合 Niagara VFX 系统提升视觉效果的同时保持良好性能 Niagara 是 UE5 新推出的粒子系统框架,在支持高度复杂的特效创作之余也考虑到了效率问题。通过合理配置模拟属性(如减少不必要的计算),可以在不牺牲画质的情况下加快启动速度并降低运行期间所需的 RAM 占用量。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值