[虚幻引擎] UE里面监控每帧循环里面 C++ 函数的性能,监控函数效率,函数执行时间。

简介: 在使用C++开发UE引擎,有时候需要监控函数的执行的执行效率,这个时候有两种方式可以使用。

1.  执行代码耗时时间

doubleThisTime=0;
{
SCOPE_SECONDS_COUNTER(ThisTime);
// ...// 一串代码// ...}
UE_LOG(LogTemp, Log, TEXT("Stats::Broadcast %.2f"), ThisTime);

这样就可以输出这一段代码消耗时间,此方法会捕获时间(以秒为单位传递),并将增量时间添加到传入的变量。


2. 函数每帧监控

在一些函数是每帧都要执行的时候,那就可以用UE的统计系统来显示,这样更方便。

先在CPP定义一个自定义监听组

DECLARE_STATS_GROUP(TEXT("DTActor"), STATGROUP_DTActor, STATCAT_Test);

这样启动程序的时候, 就可以看到自己定义的组

然后需要定义函数监听模块

DECLARE_CYCLE_STAT(TEXT("DTActor Tick"), STAT_Tick, STATGROUP_DTActor);
DECLARE_CYCLE_STAT(TEXT("DTActor Call"), STAT_Call, STATGROUP_DTActor);

并在相应的函数中启动相应模块

voidADTActor::Tick(floatDeltaTime)
{
SCOPE_CYCLE_COUNTER(STAT_Tick);
Super::Tick(DeltaTime);
}
voidADTActor::Call()
{
SCOPE_CYCLE_COUNTER(STAT_Call);
}

这样在运行关卡的时候就会显示函数的具体执行时间

以下是这个Actor的完整代码,可以自己测试一下。

DTActor.h

// Copyright 2023 Dexter.Wan. All Rights Reserved. // EMail: 45141961@qq.com// Website: https://dt.cq.cn/#pragma once#include "CoreMinimal.h"#include "GameFramework/Actor.h"#include "DTActor.generated.h"UCLASS()
classDTMOVIE_APIADTActor : publicAActor{
GENERATED_BODY()
public:
ADTActor();
protected:
virtualvoidBeginPlay() override;
public:
virtualvoidTick(floatDeltaTime) override;
voidCall();
};


DTActor.cpp

// Copyright 2023 Dexter.Wan. All Rights Reserved. // EMail: 45141961@qq.com// Website: https://dt.cq.cn/#include "DTActor.h"DECLARE_STATS_GROUP(TEXT("DTActor"), STATGROUP_DTActor, STATCAT_Test);
DECLARE_CYCLE_STAT(TEXT("DTActor Tick"), STAT_Tick, STATGROUP_DTActor); 
DECLARE_CYCLE_STAT(TEXT("DTActor Call"), STAT_Call, STATGROUP_DTActor);
ADTActor::ADTActor()
{
PrimaryActorTick.bCanEverTick=true;
}
voidADTActor::BeginPlay()
{
Super::BeginPlay();
}
voidADTActor::Tick(floatDeltaTime)
{
SCOPE_CYCLE_COUNTER(STAT_Tick);
Super::Tick(DeltaTime);
FStringS;
for ( intn=0; n<50000; ++n )
    {
S+=TEXT("1");
    }
Call();
Call();
}
voidADTActor::Call()
{
SCOPE_CYCLE_COUNTER(STAT_Call);
FStringS;
for ( intn=0; n<50000; ++n )
    {
S+=TEXT("1");
    }
}

80后程序员

https://dt.cq.cn/archives/357

相关文章
|
1月前
|
存储 缓存 算法
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能
115 0
|
16天前
|
编译器 C语言 C++
【C++初阶(九)】C++模版(初阶)----函数模版与类模版
【C++初阶(九)】C++模版(初阶)----函数模版与类模版
19 0
|
24天前
|
C++
C++ While 和 For 循环:流程控制全解析
本文介绍了C++中的`switch`语句和循环结构。`switch`语句根据表达式的值执行匹配的代码块,可以使用`break`终止执行并跳出`switch`。`default`关键字用于处理没有匹配`case`的情况。接着,文章讲述了三种类型的循环:`while`循环在条件满足时执行代码,`do/while`至少执行一次代码再检查条件,`for`循环适用于已知循环次数的情况。`for`循环包含初始化、条件和递增三个部分。此外,还提到了嵌套循环和C++11引入的`foreach`循环,用于遍历数组元素。最后,鼓励读者关注微信公众号`Let us Coding`获取更多内容。
21 0
|
26天前
|
存储 缓存 C++
C++链表常用的函数编写(增查删改)内附完整程序
C++链表常用的函数编写(增查删改)内附完整程序
|
28天前
|
存储 安全 编译器
【C++】类的六大默认成员函数及其特性(万字详解)
【C++】类的六大默认成员函数及其特性(万字详解)
35 3
|
1月前
|
安全 程序员 C++
【C++ 基本知识】现代C++内存管理:探究std::make_系列函数的力量
【C++ 基本知识】现代C++内存管理:探究std::make_系列函数的力量
102 0
|
1月前
|
设计模式 安全 C++
【C++ const 函数 的使用】C++ 中 const 成员函数与线程安全性:原理、案例与最佳实践
【C++ const 函数 的使用】C++ 中 const 成员函数与线程安全性:原理、案例与最佳实践
71 2
|
1月前
|
安全 编译器 程序员
【C++ 泛型编程 高级篇】C++ 编程深掘:静态成员函数检查的艺术与实践
【C++ 泛型编程 高级篇】C++ 编程深掘:静态成员函数检查的艺术与实践
64 0
|
1月前
|
存储 安全 编译器
【C++ 函数设计的艺术】深挖 C++ 函数参数的选择 智能指针与 std::optional:最佳实践与陷阱
【C++ 函数设计的艺术】深挖 C++ 函数参数的选择 智能指针与 std::optional:最佳实践与陷阱
111 0
|
1月前
|
安全 算法 编译器
【C++中的const函数】何时与如何正确声明使用C++ const函数(三)
【C++中的const函数】何时与如何正确声明使用C++ const函数
26 0