挿入文字列の速度について

.NET 5のコンソールにて検証してみた。

結論としては文字列連結と大差ない。

 

 

using System;
using System.Diagnostics;
using System.Text;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            int loop = 10000000;
            Stopwatch sw = new Stopwatch();
            GC.Collect();
            string str1 = DateTime.Today.AddDays(7).ToString(); ;
            string str2 = DateTime.Now.ToString("yyyyMMdd");
            string str3 = DateTime.UtcNow.AddDays(2).ToShortDateString();
            string date = DateTime.Now.ToString();
            string[] st1 = new string[loop];
            sw.Start();
            for (int i = 0; i < loop; i++)
            {
                st1[i] = str1 + str2 + str3 + date;
            }

            sw.Stop();
            var Plus = sw.ElapsedMilliseconds;
            sw.Reset();

            GC.Collect();

            string[] st2 = new string[loop];
            sw.Start();
            for (int i = 0; i < loop; i++)
            {
                st2[i] = $"{str1}{str2}{str3}{date}";
            }
            sw.Stop();


            var interpolation = sw.ElapsedMilliseconds;
            sw.Reset();
            GC.Collect();
            string[] st3 = new string[loop];
            sw.Start();
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < loop; i++)
            {
                sb.Clear();
                sb.Append(str1);
                sb.Append(str2);
                sb.Append(str3);
                sb.Append(date);
                st3[i] = sb.ToString();
            }
            sw.Stop();
            var sbt = sw.ElapsedMilliseconds;

            Console.WriteLine($"Plus : {Plus}");
            Console.WriteLine($"interpolation : {interpolation}");
            Console.WriteLine($"StringBuilder : {sbt}");
        }
    }
}
    




 

 

 実行結果

Plus : 1630
interpolation : 1612
StringBuilder : 1330    

 

 見た目重視なら挿入文字列。

速度重視ならStringBuilder使っておけばよいのでは。