C# 文字列の繰り返し処理で「StringBuilder」と「Concat & Repeat」のパフォーマンスを計測して比較する

  • 作成日 2022.09.23
  • C#
C# 文字列の繰り返し処理で「StringBuilder」と「Concat & Repeat」のパフォーマンスを計測して比較する

C#で、文字列の繰り返し処理で「StringBuilder」と「Concat & Repeat」のそれぞれで実行したパフォーマンスを計測して比較するコードと結果を記述してます。

環境

  • OS windows10 pro 64bit
  • Microsoft Visual Studio Community 2022 Version 17.2.6

パフォーマンス計測

「System.Diagnostics.Stopwatch」を使用して、文字列の繰り返し処理で「StringBuilder」と「Concat & Repeat」を1000万回実行して、計測した結果を比較してみます。

using System;
using System.Text;
using System.Linq;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int n = 10_00_000;
            
            int num = 10;

            string str;

            TimeSpan ts;

            var time = new System.Diagnostics.Stopwatch();

            // 計測開始
            time.Start();

            for (int i = 0; i < n; i++)
            {
                str = new StringBuilder("mebee".Length * num).Insert(0, "mebee", num).ToString();
            }

            time.Stop();

            ts = time.Elapsed;

            System.Diagnostics.Debug.WriteLine($"StringBuilder : {time.ElapsedMilliseconds}ms");


            // 計測開始
            time.Reset(); // リセット
            time.Start();

            for (int i = 0; i < n; i++)
            {
                str = string.Concat(Enumerable.Repeat("mebee", num));
            }

            time.Stop();

            ts = time.Elapsed;

            System.Diagnostics.Debug.WriteLine($"Concat & Repeat : {time.ElapsedMilliseconds}ms");

        }
    }
}

実行結果をみると「StringBuilder」を使用するのが速そうです。

【1回目】
StringBuilder : 237ms
Concat & Repeat : 317ms

【2回目】
StringBuilder : 181ms
Concat & Repeat : 313ms

【3回目】
StringBuilder : 181ms
Concat & Repeat : 313ms