Skip to content

Instantly share code, notes, and snippets.

@laicasaane
Created June 30, 2022 07:33
Show Gist options
  • Save laicasaane/2b3f3abee9581db90bc21bc4905bc49b to your computer and use it in GitHub Desktop.
Save laicasaane/2b3f3abee9581db90bc21bc4905bc49b to your computer and use it in GitHub Desktop.
Test ZString performance
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