加载卡顿_优化UE4加载卡顿

本文介绍了一种追踪UE4游戏中资源加载导致的卡顿问题的方法,通过增加命令行参数TrackBootLoading,过滤并分析LogStreaming输出,找出耗时资源。建议在资源加载时考虑使用其他线程以优化性能。
摘要由CSDN通过智能技术生成

发现一个可以追踪特定资源加载耗时的功能,分享给大家,举例如下:

适用情景:比如游戏跑着跑着突然画面卡了一下

  • 解决步骤:
  1. 使用SessionFrontEnd确定是由于资源加载造成的卡顿,如:

0a3120234f543683aaa24330bd8ab28e.png

2. 增加命令行参数 TrackBootLoading ,重新启动UE4编译器

63b599465b25b1f3e72ad4d68b8cd7d1.png

3. 过滤输出窗口,查看LogStreaming输出

a42fab88ff0a78f35f426bed1b4bd016.png

6ec5b3f02980b773225a751708f385d6.png

4. 知道是什么资源耗时比较多,剩下的就是具体情况具体分析拉


  • 关键代码位置在这里,有兴趣的可以查看一下
UObject* StaticLoadObjectInternal(UClass* ObjectClass, UObject* InOuter, const TCHAR* InName, const TCHAR* Filename, uint32 LoadFlags, UPackageMap* Sandbox, bool bAllowObjectReconciliation, FUObjectSerializeContext* InSerializeContext)
{
	SCOPE_CYCLE_COUNTER(STAT_LoadObject);
	UE_LOG(LogUObjectGlobals, Warning, TEXT("Hypen StaticLoadObjectInternal InName(%s)#FileName(%s)#GFrameNumber(%d)"), InName, Filename, GFrameNumber);

	check(ObjectClass);
	check(InName);

	FScopedLoadingState ScopedLoadingState(InName);
        //余下代码略
}
  • 建议扩展方法:

一般我们做游戏的,都会把资源放在其他线程进行加载,所以这个日志的收集可能要区分一下是否由GameThread输出,可以这样简单改一下:

	if (IsInGameThread())
	{
		FScopedLoadingState ScopedLoadingState(InName);
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值