バージョン
- Unity6 (6000.0.23f1)
文字列往年のバトル、stringとStringBuilderの比較です。
今回は文字列連結の処理速度のみに焦点を当てて検証していきます。
結論
少ない文字列連結ならどっちでもいい!けど、基本的にはStringBuilderが優勢。
連結数が多い場合は圧倒的にStringBuilder!!
テスト環境
空のオブジェクトに以下のスクリプトをアタッチします。
using System;
using System.Text;
using UnityEngine;
public class StringVsStringBuilder : MonoBehaviour
{
private int testCnt1 = 1;
private int testCnt100 = 100;
private int testCnt10000 = 10000;
private System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
void Start()
{
//連結1回
Versus(testCnt1);
//連結100回
Versus(testCnt100);
//連結10000回
Versus(testCnt10000);
}
/// <summary>
/// string VS StringBuilder
/// </summary>
/// <param name="cnt">連結回数</param>
private void Versus(int cnt)
{
//string
string str = string.Empty;
stopwatch.Start();
for (int i = 0; i < cnt; i++)
{
str += "あいうえお";
}
stopwatch.Stop();
double strTime = stopwatch.Elapsed.TotalMilliseconds;
ResetTimer();
//StringBuilder
StringBuilder sb = new StringBuilder();
stopwatch.Start();
for (int i = 0; i < cnt; i++)
{
sb.Append("あいうえお");
}
string sbStr = sb.ToString();
stopwatch.Stop();
double sbTime = stopwatch.Elapsed.TotalMilliseconds;
ResetTimer();
Debug.Log($"【連結{cnt}回】string:{strTime:F3}ms, StringBuilder:{sbTime:F3}ms");
}
/// <summary>
/// リセット
/// </summary>
private void ResetTimer()
{
GC.Collect();
GC.WaitForPendingFinalizers();
stopwatch.Reset();
}
}
string、StringBuilderでそれぞれ「あいうえお」という文字列の連結を1回、100回、10000回行います。
検証
上記スクリプトの実行結果は次のようになりました。

全ての文字列連結においてStringBuilderの方が処理速度が速くなりました。
100回連結までは微々たる差ですが、10000回レベルになれば連結数が増えれば増えるほど処理速度の差はどんどん開いていきます。
まとめ
StringBuiderの勝利!!
但し、少ない連結数や文字数の場合はstringの方が可読性の面で適しています。簡単な文字列連結の場合は私も実際にstringを使用しています。
結局好み!!