C# アルファベットの小文字・大文字の区別なしでの比較で「Equals」と「ToLower」のパフォーマンスを計測して比較する

  • 作成日 2022.12.07
  • C#
C# アルファベットの小文字・大文字の区別なしでの比較で「Equals」と「ToLower」のパフォーマンスを計測して比較する

C#で、アルファベットの小文字・大文字の区別なしでの比較処理を「Equals」と「ToLower」のそれぞれで実行したパフォーマンスを計測して比較するコードと結果を記述してます。結果は「Equals」を使用した方が良さそうです。

環境

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

パフォーマンス計測

「System.Diagnostics.Stopwatch」を使用して、アルファベットの小文字・大文字の区別なしでの比較処理で「Equals」と「ToLower」を1000万回実行して、計測した結果を比較してみます。

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

namespace ConsoleApp1
{
    internal class Program
    {
        private const string txt = "123456789";
        private const int n = 10_00_000;

        static void Main(string[] args)
        {

            string txt1 = "HeLLo";
            string txt2 = "hello";            

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

            Boolean a, b;

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

            for (int i = 0; i < n; i++)
            {
                a = txt1.Equals(txt2, StringComparison.OrdinalIgnoreCase);
            }

            time.Stop();            

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


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

            for (int i = 0; i < n; i++)
            {
                b = ( txt1.ToLower() == txt2.ToLower() );
            }

            time.Stop();

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

        }
    }
}

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

【1回目】
Equals : 9ms
ToLower : 168ms

【2回目】
Equals : 9ms
ToLower : 171ms

【3回目】
Equals : 9ms
ToLower : 161ms