FC2ブログ
    09 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 11

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】UnityC#で文字列の結合ってStringBuilder使ってますか?どれくらいStringの結合と速度が違うのか測ってみた。 

    こんにちは。
    ブログかくのを忘れていた坂内っす。

    UnityC#で文字列の結合を行う際に、StringBuilderを使うといいって話よく聞きますよね。

    どれくらいいいのかちょっと確認してみました。


    1から10000の文字を結合する処理をstringの結合と、StringBuilderでの結合の2パターンで書いてみました。

    [Blog20220613.cs]

    using System.Text;
    using UnityEngine;

    public class Blog20220613 : MonoBehaviour
    {
    void Start()
    {
    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
    // stringの結合
    sw.Start();
    string str = "";
    for (int i = 0; i < 10000; i++) {
    str += i.ToString();
    }
    sw.Stop();
    Debug.Log("string結合:" + str);
    Debug.Log(sw.ElapsedMilliseconds);

    sw.Reset();

    // StringBuilderでの結合
    sw.Start();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 10000; i++) {
    sb.Append(i.ToString());
    }
    sw.Stop();
    Debug.Log("StringBuilder結合:" + sb.ToString());
    Debug.Log(sw.ElapsedMilliseconds);
    }

    }



    上側がstring結合、下側がStringBuilderでの結合になります。
    これを実行した結果はこちら。


    やば・・・・・!?

    約47倍!?

    StringBuilder早すぎじゃないですかね?

    100回や500回とかの結合ならそこまで差はなさそうですが、1000回を超すと差がはっきりと出てきますね!

    文字列の結合なので、こんな感じでアルファベット並べたのを繰り返した場合、さらに差がはっきりと出ますね。


    using System.Text;
    using UnityEngine;

    public class Blog20220613 : MonoBehaviour
    {
    void Start()
    {
    System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
    // stringの結合
    sw.Start();
    string str = "";
    for (int i = 0; i < 10000; i++) {
    str += "abcdefghijklmnopqrstuvwxyz";
    }
    sw.Stop();
    Debug.Log("string結合:" + str);
    Debug.Log(sw.ElapsedMilliseconds);

    sw.Reset();

    // stringbuilderでの結合
    sw.Start();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 10000; i++) {
    sb.Append("abcdefghijklmnopqrstuvwxyz");
    }
    sw.Stop();
    Debug.Log("StringBuilder結合:" + sb.ToString());
    Debug.Log(sw.ElapsedMilliseconds);
    }

    }




    これ凄いですね。

    今後文字列の結合にはStringBuilderを使おうと心に決めました。

    では、あでゅ~ノシ

    Category: 開発日記(Unity)

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/895-ad50c807
    この記事にトラックバックする(FC2ブログユーザー)