Created
June 30, 2022 07:33
-
-
Save laicasaane/2b3f3abee9581db90bc21bc4905bc49b to your computer and use it in GitHub Desktop.
Test ZString performance
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using UnityEngine; | |
using Cysharp.Text; | |
using TMPro; | |
using System; | |
public class TestString : MonoBehaviour | |
{ | |
[SerializeField] private int loopAmount = 1000; | |
[SerializeField] private TMP_Text tmp; | |
private readonly string[] _baseString = new[] | |
{"Prince of Endia", "Guardian of the Kingdom", "Arrow of the North", "Endia's Sword"}; | |
private readonly string[] _templateString = new[] | |
{ | |
"Jave throws a Justice flag to nearby location that increases allies' attack speed by {0}% for a short duration.", | |
"Restores {0} HP (+ {1}% HP of Lyna) to all nearby troops and heroes.", | |
"Arryn's attack speed is increased by {0}% (+{1}% for every {2} points of Arryn's max attack).", | |
"Dealing {0} (+{1}% Jave's maximum attack) physical damage to nearby enemies and stun them for {2} seconds.{3} enemy damaged by this ability will lower its cooldown by 3 second." | |
}; | |
private Utf8ValueStringBuilder _sbUtf8 = ZString.CreateUtf8StringBuilder(); | |
public void Test_All() | |
{ | |
GC.Collect(); | |
Test_String_Format(); | |
GC.Collect(); | |
Test_ZString_Format(); | |
GC.Collect(); | |
Test_ZString_Utf8StringBuilder_Member(); | |
GC.Collect(); | |
Test_ZString_Utf8StringBuilder_Local(); | |
GC.Collect(); | |
Test_TMPro_Text(); | |
GC.Collect(); | |
Test_TMPro_SetText(); | |
GC.Collect(); | |
Test_TMPro_SetTextFormat(); | |
GC.Collect(); | |
} | |
public void Test_String_Format() | |
{ | |
for (var i = 0; i < loopAmount; i++) | |
{ | |
String_Format(); | |
} | |
} | |
public void Test_ZString_Format() | |
{ | |
for (var i = 0; i < loopAmount; i++) | |
{ | |
ZString_Format(); | |
} | |
} | |
public void Test_ZString_Utf8StringBuilder_Local() | |
{ | |
for (var i = 0; i < loopAmount; i++) | |
{ | |
ZString_Utf8StringBuilder_Local(); | |
} | |
} | |
public void Test_ZString_Utf8StringBuilder_Member() | |
{ | |
for (var i = 0; i < loopAmount; i++) | |
{ | |
ZString_Utf8StringBuilder_Member(); | |
} | |
} | |
public void Test_TMPro_Text() | |
{ | |
for (int i = 0; i < loopAmount; i++) | |
{ | |
TMPro_ZString_Format_Text(); | |
} | |
} | |
public void Test_TMPro_SetText() | |
{ | |
for (int i = 0; i < loopAmount; i++) | |
{ | |
TMPro_ZString_Format_SetText(); | |
} | |
} | |
public void Test_TMPro_SetTextFormat() | |
{ | |
for (var i = 0; i < loopAmount; i++) | |
{ | |
TMPro_ZString_SetTextFormat(); | |
} | |
} | |
private void String_Format() | |
{ | |
var templateIndex = UnityEngine.Random.Range(0, _templateString.Length); | |
var templateString = _templateString[templateIndex]; | |
var result = ""; | |
switch (templateIndex) | |
{ | |
case 0: | |
result = string.Format(templateString, GetRandomBaseString()); | |
break; | |
case 1: | |
result = string.Format(templateString, GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
case 2: | |
result = string.Format(templateString, GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
case 3: | |
result = string.Format(templateString, GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
} | |
} | |
private void ZString_Format() | |
{ | |
var templateIndex = UnityEngine.Random.Range(0, _templateString.Length); | |
var templateString = _templateString[templateIndex]; | |
var result = ""; | |
switch (templateIndex) | |
{ | |
case 0: | |
result = ZString.Format(templateString, GetRandomBaseString()); | |
break; | |
case 1: | |
result = ZString.Format(templateString, GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
case 2: | |
result = ZString.Format(templateString, GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
case 3: | |
result = ZString.Format(templateString, GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
} | |
} | |
private void ZString_Utf8StringBuilder_Local() | |
{ | |
var templateIndex = UnityEngine.Random.Range(0, _templateString.Length); | |
var templateString = _templateString[templateIndex]; | |
using var sb = ZString.CreateUtf8StringBuilder(); | |
switch (templateIndex) | |
{ | |
case 0: | |
sb.AppendFormat(templateString, GetRandomBaseString()); | |
break; | |
case 1: | |
sb.AppendFormat(templateString, GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
case 2: | |
sb.AppendFormat(templateString, GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
case 3: | |
sb.AppendFormat(templateString, GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
} | |
} | |
private void ZString_Utf8StringBuilder_Member() | |
{ | |
var templateIndex = UnityEngine.Random.Range(0, _templateString.Length); | |
var templateString = _templateString[templateIndex]; | |
var sb = _sbUtf8; | |
sb.Clear(); | |
switch (templateIndex) | |
{ | |
case 0: | |
sb.AppendFormat(templateString, GetRandomBaseString()); | |
break; | |
case 1: | |
sb.AppendFormat(templateString, GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
case 2: | |
sb.AppendFormat(templateString, GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
case 3: | |
sb.AppendFormat(templateString, GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
} | |
} | |
private void TMPro_ZString_Format_Text() | |
{ | |
var templateIndex = UnityEngine.Random.Range(0, _templateString.Length); | |
var templateString = _templateString[templateIndex]; | |
var result = ""; | |
switch (templateIndex) | |
{ | |
case 0: | |
result = ZString.Format(templateString, GetRandomBaseString()); | |
break; | |
case 1: | |
result = ZString.Format(templateString, GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
case 2: | |
result = ZString.Format(templateString, GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
case 3: | |
result = ZString.Format(templateString, GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
} | |
tmp.text = result; | |
} | |
private void TMPro_ZString_Format_SetText() | |
{ | |
var templateIndex = UnityEngine.Random.Range(0, _templateString.Length); | |
var templateString = _templateString[templateIndex]; | |
var result = ""; | |
switch (templateIndex) | |
{ | |
case 0: | |
result = ZString.Format(templateString, GetRandomBaseString()); | |
break; | |
case 1: | |
result = ZString.Format(templateString, GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
case 2: | |
result = ZString.Format(templateString, GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
case 3: | |
result = ZString.Format(templateString, GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
} | |
tmp.SetText(result); | |
} | |
private void TMPro_ZString_SetTextFormat() | |
{ | |
var templateIndex = UnityEngine.Random.Range(0, _templateString.Length); | |
var templateString = _templateString[templateIndex]; | |
switch (templateIndex) | |
{ | |
case 0: | |
tmp.SetTextFormat(templateString, GetRandomBaseString()); | |
break; | |
case 1: | |
tmp.SetTextFormat(templateString, GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
case 2: | |
tmp.SetTextFormat(templateString, GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
case 3: | |
tmp.SetTextFormat(templateString, GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString(), GetRandomBaseString()); | |
break; | |
} | |
} | |
private string GetRandomBaseString() | |
{ | |
var randomIndex = UnityEngine.Random.Range(0, _baseString.Length); | |
return _baseString[randomIndex]; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment