首页 > 其他分享 >关于 Puerts 的性能问题

关于 Puerts 的性能问题

时间:2024-07-06 15:19:46浏览次数:13  
标签:0.8 Puerts DrawLine 性能 ViewportSize Context UE FVector2D 关于

Puerts 在 UE 开发中提供了一定的便利性,可以用代码的方式写蓝图,但是官方是不推荐这么做的

原话如下

那么这个性能问题究竟有多大呢

这里先用 C++ 写一个测试代码

#include "TestWidget.h"

#include "Blueprint/WidgetBlueprintLibrary.h"
#include "Blueprint/WidgetLayoutLibrary.h"

int32 UTestWidget::NativePaint(const FPaintArgs& Args, const FGeometry& AllottedGeometry,
                               const FSlateRect& MyCullingRect, FSlateWindowElementList& OutDrawElements, int32 LayerId,
                               const FWidgetStyle& InWidgetStyle, bool bParentEnabled) const
{
    FPaintContext Context(AllottedGeometry, MyCullingRect, OutDrawElements, LayerId, InWidgetStyle, bParentEnabled);

    FVector2D ViewportSize = UWidgetLayoutLibrary::GetViewportSize(const_cast<UTestWidget*>(this));

    FVector2D LeftTopPoint = FVector2D(ViewportSize.X * 0.2, ViewportSize.Y * 0.2);
    FVector2D RightTopPoint = FVector2D(ViewportSize.X * 0.8, ViewportSize.Y * 0.2);
    FVector2D LeftBottomPoint = FVector2D(ViewportSize.X * 0.2, ViewportSize.Y * 0.8);
    FVector2D RightBottomPoint = FVector2D(ViewportSize.X * 0.8, ViewportSize.Y * 0.8);

    UWidgetBlueprintLibrary::DrawLine(Context, LeftTopPoint, RightTopPoint);
    UWidgetBlueprintLibrary::DrawLine(Context, RightTopPoint, RightBottomPoint);
    UWidgetBlueprintLibrary::DrawLine(Context, RightBottomPoint, LeftBottomPoint);
    UWidgetBlueprintLibrary::DrawLine(Context, LeftBottomPoint, LeftTopPoint);

    return Super::NativePaint(Args, AllottedGeometry, MyCullingRect, OutDrawElements, LayerId, InWidgetStyle,
                              bParentEnabled);
}

然后用 Unreal Insight 看一下性能数据

只看 Paint 的数据,作为对照组

然后在 TypeScript 实现一样的代码

import { $Ref } from "puerts"
import * as UE from "ue"

class TS_TestWidget extends UE.PuertsWidget
{
    OnPaint(Context: $Ref<UE.PaintContext>): void 
    {
        let ViewportSize = UE.WidgetLayoutLibrary.GetViewportSize(this);

        let LeftTopPoint = new UE.Vector2D(ViewportSize.X * 0.2, ViewportSize.Y * 0.2);
        let RightTopPoint = new UE.Vector2D(ViewportSize.X * 0.8, ViewportSize.Y * 0.2);
        let LeftBottomPoint = new UE.Vector2D(ViewportSize.X * 0.2, ViewportSize.Y * 0.8);
        let RightBottomPoint = new UE.Vector2D(ViewportSize.X * 0.8, ViewportSize.Y * 0.8);

        UE.WidgetBlueprintLibrary.DrawLine(Context, LeftTopPoint, RightTopPoint);
        UE.WidgetBlueprintLibrary.DrawLine(Context, RightTopPoint, RightBottomPoint);
        UE.WidgetBlueprintLibrary.DrawLine(Context, RightBottomPoint, LeftBottomPoint);
        UE.WidgetBlueprintLibrary.DrawLine(Context, LeftBottomPoint, LeftTopPoint);
    }
}
export default TS_TestWidget

跟 C++ 对比,在最慢的时候可以可以达到几十倍的差距,假如有几十个这样的 Widget 同时运行(例如血条),那么肯定是会出现游戏顿卡或者游戏帧数低的情况

所以在 Puerts 中尽量不写每帧都会运行的逻辑,避免因为跨语言调用而造成的性能问题

标签:0.8,Puerts,DrawLine,性能,ViewportSize,Context,UE,FVector2D,关于
From: https://www.cnblogs.com/GKEC/p/18287290

相关文章

  • 关于是否要卖掉汽车的想法
    为什么买这个车,当时觉得开汽车很帅,而且自己驾照考了很多年,都不会开了 加上冬天回家和回京,总是需要抢票麻烦别人接送,老爸天不亮骑着三轮载我去青蓝高速口等车,大冬天的等一个多小时,自己在外面打工这么多年了,同龄人很多都结婚买车了,自己还是跟个学生浪子一样,所以特别想买一辆车来支......
  • spring-关于组件的注入及获取流程
    一、组件注入的基本流程:容器初始化:Spring应用启动时,会读取配置(如XML配置、注解配置等),并根据这些配置创建Bean定义(BeanDefinition)。根据Bean定义,Spring容器实例化Bean,并管理它们之间的依赖关系。依赖解析与注入:当一个Bean依赖于另一个Bean时,Spring容器负责查找并注入这个依赖......
  • 【中国算力大会分会,SPIE独立出版!AHPCAI前三届已完成EI检索!】2024算法、高性能计算与人
    2024算法、高性能计算与人工智能国际学术会议(AHPCAI2024)定于2024年8月14-16日在中国郑州举行。会议主要围绕算法、高性能计算与人工智能等研究领域展开讨论。会议旨在为从事算法、高性能计算与人工智能研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果......
  • Linux关于数据库,群集,缓存加速等精捡面试题
    目录第一部分:企业网站架构部署与优化..................................................61.列举几种常见的HTTP状态码?及各种代表的含义?................................62.HTTP请求方法有哪些?请至少列举三种,并简述它们的用途。........................63.HTTP协......
  • Webpack: 使用 SplitChunks提升应用性能
    概述Webpack默认会将尽可能多的模块代码打包在一起,优点是能减少最终页面的HTTP请求数,但缺点也很明显:页面初始代码包过大,影响首屏渲染性能;无法有效应用浏览器缓存,特别对于NPM包这类变动较少的代码,业务代码哪怕改了一行都会导致NPM包缓存失效。为此,Webpack提供了S......
  • JVM垃圾回收性能调优实战指南
    JVM垃圾回收性能调优实战指南一、引言在Java应用程序中,垃圾回收(GarbageCollection,GC)是自动管理内存的重要机制。然而,不恰当的垃圾回收配置可能导致性能瓶颈,如频繁的GC暂停、内存碎片过多等。因此,对JVM垃圾回收性能进行调优是提升Java应用性能的关键环节。本文将介绍JVM......
  • MAX98357、MAX98357A、MAX98357B小巧、低成本、PCM D类IIS放大器,具有AB类性能中文说明
    前言:MAX98357A支持标准I2S数据,MAX98357B支持左对齐数字音频数据。两个版本均支持8通道TDM音频数据。IIS数字功放MAX98357开发板/评估系统MAX98357WLP-9(1.347x1.437mm)封装的外观和丝印AKMMAX98357TQFN-16-EP(3x3mm)封装的外观和丝印AKK引脚说明WLP......
  • 关于离线处理 Windows 系统中硬件驱动程序的详细说明:
    关于离线处理Windows系统中硬件驱动程序的详细说明:1.使用DISM离线卸载所有OEM驱动程序DISM(DeploymentImageServicingandManagement)是一个强大的工具,用于管理和准备Windows映像。通过DISM,可以在离线环境中卸载所有OEM驱动程序。打开命令提示符(管理员权限):右键点......
  • 新手如何尽快入门性能测试?
    忙碌了一周,又到了愉快的周五了,懒洋洋躺在沙发上,玩两局游戏好好放松一下吧!今天浅谈软件性能测试! 在当今快节奏的科技环境中,软件性能测试变得尤为重要。无论是确保应用在高并发情况下的稳定性,还是优化响应时间,性能测试都是每个软件测试工程师的必备技能。那么,对于新手来说,如何快......
  • 关于平衡树(施工中)
    $\LARGE{一些无聊的定义}$二叉搜索树(BST树)定义二叉搜索树是一种二叉树的树形数据结构,其定义如下:空树是二叉搜索树。若二叉搜索树的左子树不为空,则其左子树上所有点的附加权值均小于其根节点的值。若二叉搜索树的右子树不为空,则其右子树上所有点的附加权值均大于其......