はじめに
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