はじめに
今回は文字列の連結をするときにより高速に行う方法についての記事になります!
string型の文字列の連結の方法として、まずは+
演算子が思いつくのではないでしょうか。
ただ大量の文字列を連結する際に+
演算子で連結するのはややパフォーマンスが良くないみたいでした。
その代わりとしてStringBuilder
クラスというものが推奨されています。
これについてみていきましょう。
パフォーマンスが良い理由
Stringオブジェクトは一度インスタンス化すると内容を変更することができないという性質があるようです。
つまり連結をするたびに新しいStringオブジェクトが作成されてしまいます。
これに対してStringBuilder
クラスは内容を変更することができるので、余分なオブジェクトを生成しないようになり、パフォーマンスが良くなることが多いようです。
使い方
using UnityEngine; public class Test : MonoBehaviour { private void Start() { string s = "おなかすいた"; System.Text.StringBuilder sb = new System.Text.StringBuilder(); for(int i = 0; i < 1000; i++) { sb.Append(s); } Debug.Log(sb.ToString()) ; //おなかすいたおなかすいたおなかすいた・・・ } }
実際に処理時間を比較してみた
System.Diagnostics.Stopwatch
クラスを用いて実際に上記のコードのループの回数を変化させながら、+
演算子を用いた場合とStringBuilder
クラスを用いた場合で比較をしてみました。
ループの回数 | StringBuilder クラスの場合の処理時間(ms) |
+ 演算子の場合の処理時間(ms) |
---|---|---|
1 | 0 | 0 |
10 | 0 | 0 |
100 | 0 | 0 |
1000 | 0 | 11 |
10000 | 2 | 2659 |
50000 | 10 | 68833 |
ループの回数が少ないときは両方とも計測できないほど処理時間が短いので、さほど気にする必要はないかもしれません。
ただループの回数が大きくなるとかなり処理時間に開きがでてきてしまいました。
さいごに
最後にグラフを見る限り、大量の文字列を連結をするときはStringBuilder
クラスを使ったほうが良さそうみたいです。
是非うまく活用してみてください!