C# 数値の文字変換で「string.Format」と「ToString」と「+演算子」のパフォーマンスを計測して比較する

  • 作成日 2022.10.21
  • C#
C# 数値の文字変換で「string.Format」と「ToString」と「+演算子」のパフォーマンスを計測して比較する

C#で、数値の文字変換処理を「string.Format」と「ToString」と「+演算子」のそれぞれで実行したパフォーマンスを計測して比較するコードと結果を記述してます。結果として「string.Format」以外を使用した方が良さそうです。

環境

  • OS windows11 pro 64bit
  • Microsoft Visual Studio Community 2022 Version 17.2.3

パフォーマンス計測

「System.Diagnostics.Stopwatch」を使用して、文字列の文字数カウント処理で「string.Format」と「ToString」と「+演算子」を100万回実行して、計測した結果を比較してみます。

using System;
using System.Text.RegularExpressions;

namespace ConsoleApp1
{
    internal class Program
    {

        private const int n = 1_000_000;

        static void Main(string[] args)
        {

            int num = 10;
            string str;

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

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

            for (int i = 0; i < n; i++)
            {
                str = string.Format("{0}", num);
            }

            time.Stop();

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


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

            for (int i = 0; i < n; i++)
            {
                str = num.ToString();

            }

            time.Stop();

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

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

            for (int i = 0; i < n; i++)
            {
                str = Convert.ToString(num);
            }

            time.Stop();

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

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

            for (int i = 0; i < n; i++)
            {
                str = num + "";

            }

            time.Stop();

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

        }
    }
}

実行結果をみると「+」と「ToString」と「Convert.ToString」を使用した方が、速そうです。

【1回目】
string.Format : 97ms
ToString : 24ms
Convert.ToString : 25ms
+ : 14ms

【2回目】
string.Format : 81ms
ToString : 12ms
Convert.ToString : 12ms
+ : 13ms

【3回目】
string.Format : 97ms
ToString : 13ms
Convert.ToString : 13ms
+ : 13ms