Unreal脚本性能对比
常见虚幻脚本简单测试
case 1: UnLua DevelopmentEditor
code:
local MathLibrary = UE.UKismetMathLibrary
local BeginT = MathLibrary.Now()
local TestVec
for i = 1, 1024 * 1024 do
TestVec = UE.TArray(UE.FVector)
TestVec:Add(UE.FVector(0, 0, 0))
TestVec:Add(UE.FVector(0, 0, 1))
TestVec:Add(UE.FVector(0, 1, 0))
TestVec:Add(UE.FVector(1, 0, 0))
TestVec:Add(UE.FVector(1, 1, 0))
TestVec:Add(UE.FVector(1, 0, 1))
TestVec:Add(UE.FVector(0, 1, 1))
TestVec:Add(UE.FVector(1, 1, 1))
MathLibrary.PointsAreCoplanar(TestVec, 0.1)
end
local EndT = MathLibrary.Now();
local DeltaT = MathLibrary.Subtract_DateTimeDateTime(EndT, BeginT);
local Day, Hour, Min, Second, MS = MathLibrary.BreakTimespan(DeltaT);
local Msg = string.format("%d, %d", Second, MS);
print("Call ToUnixTimestamp Cost: " .. Msg);
result:
LogUnLua: Call Script Cost: 6.531s
LogUnLua: Call Script Cost: 6.649s
LogUnLua: Call Script Cost: 6.757s
LogUnLua: Call Script Cost: 6.612s
LogUnLua: Call Script Cost: 6.682s
LogUnLua: Call Script Cost: 6.758s
case 2: puerts(v8) DevelopmentEditor
code:
let MathLibrary = UE.KismetMathLibrary;
let FVector = UE.Vector;
let BeginT = MathLibrary.Now();
for (let i = 0; i < 1024 * 1024; ++i) {
let TestVec = UE.NewArray(UE.Vector);
TestVec.Add(new FVector(0, 0, 0));
TestVec.Add(new FVector(0, 0, 1));
TestVec.Add(new FVector(0, 1, 0));
TestVec.Add(new FVector(0, 1, 1));
TestVec.Add(new FVector(1, 0, 0));
TestVec.Add(new FVector(1, 0, 1));
TestVec.Add(new FVector(1, 1, 0));
TestVec.Add(new FVector(1, 1, 1));
MathLibrary.PointsAreCoplanar(TestVec, 0.1);
}
let EndT = MathLibrary.Now();
let DeltaT = MathLibrary.Subtract_DateTimeDateTime(EndT, BeginT);
let DeltaT2 = MathLibrary.GetTotalSeconds(DeltaT)
console.log("Call Script Cost: " + DeltaT2 + 's');
result:
Puerts: (0x0000021E7FD08450) Call Script Cost: 7.524s
Puerts: (0x0000021E7E0F2DB0) Call Script Cost: 7.672s
Puerts: (0x0000021E7F618090) Call Script Cost: 7.593s
Puerts: (0x0000021E86406AF0) Call Script Cost: 7.587s
Puerts: (0x0000021EB7F38D70) Call Script Cost: 7.523s
Puerts: (0x0000021EAF22BAF0) Call Script Cost: 7.568s
case 3: UnrealSharp DevelopmentEditor
code:
{
FDateTime BeginT = MathLibrary.Now();
for (int i = 0; i < 1024 * 1024; ++i)
{
List<FVector> TestVec = new List<FVector>();
TestVec.Add(new FVector(0, 0, 0));
TestVec.Add(new FVector(0, 0, 1));
TestVec.Add(new FVector(0, 1, 0));
TestVec.Add(new FVector(0, 1, 1));
TestVec.Add(new FVector(1, 0, 0));
TestVec.Add(new FVector(1, 0, 1));
TestVec.Add(new FVector(1, 1, 0));
TestVec.Add(new FVector(1, 1, 1));
MathLibrary.PointsAreCoplanar(TestVec, 0.01f);
}
FDateTime EndT = MathLibrary.Now();
FTimespan DeltaT = MathLibrary.Subtract_DateTimeDateTime(EndT, BeginT);
double DeltaT2 = MathLibrary.GetTotalSeconds(DeltaT);
SystemLibrary.PrintString("Call Script Cost: " + DeltaT2.ToString() + "s");
}
result:
LogBlueprintUserMessages: [UI_Layer_Game_C_0] Call Script Cost: 0.398s
LogBlueprintUserMessages: [UI_Layer_Game_C_0] Call Script Cost: 0.356s
LogBlueprintUserMessages: [UI_Layer_Game_C_0] Call Script Cost: 0.340s
LogBlueprintUserMessages: [UI_Layer_Game_C_0] Call Script Cost: 0.350s
LogBlueprintUserMessages: [UI_Layer_Game_C_0] Call Script Cost: 0.354s
LogBlueprintUserMessages: [UI_Layer_Game_C_0] Call Script Cost: 0.345s

浙公网安备 33010602011771号