コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】パフォーマンス改善 文字列連結編

はじめに

Unity+C# でゲームを開発している場合
StringBuilder クラスを使用して文字列連結することで
処理速度が高速化し、ガベージコレクションの実行回数を削減できます

検証用スクリプト

string クラスの文字列連結

using System;
using UnityEngine;

public class StringTest : MonoBehaviour
{
    private void Awake()
    {
        var start = Time.realtimeSinceStartup;
        var str = "";
        for ( var i = 0; i < 10000; i++ )
        {
            str += "ピカチュウ";
        }
        var elapsedTime = Time.realtimeSinceStartup - start;
        var count = GC.CollectionCount( 0 );
        Debug.Log( "経過時間: " + elapsedTime );
        Debug.Log( "GC回数: " + count );
    }
}

StringBuilder クラスの文字列連結

using System;
using System.Text;
using UnityEngine;

public class StringBuilderTest : MonoBehaviour
{
    private void Awake()
    {
        var start = Time.realtimeSinceStartup;
        var builder = new StringBuilder();
        for ( var i = 0; i < 10000; i++ )
        {
            builder.Append( "ピカチュウ" );
        }
        var elapsedTime = Time.realtimeSinceStartup - start;
        var count = GC.CollectionCount( 0 );
        Debug.Log( "経過時間: " + elapsedTime );
        Debug.Log( "GC回数: " + count );
    }
}

検証結果

クラス 経過時間 GC回数
string 1.309530000 秒 419 回
StringBuilder 0.004355669 秒 39 回

参考サイト様

http://ykimisaki.hatenablog.jp/entry/2014/08/02/040647 http://ykimisaki.hatenablog.jp/entry/2014/08/02/042917 http://ykimisaki.hatenablog.jp/entry/2014/08/06/151118

関連記事