[C# 문법] 정적 Regex, 객체 생성 Regex 성능 비교

참조



정규표현식 정적표현식 Regex.IsMatch vs 객체 생성 regex.IsMatch 성능 비교

  • MSDN에서 정규표현식을 사용할 때, 정적 Regex 사용보다 객체 생성 Regex 사용이 성능 부분에서 좋다고 합니다.
  • 정적 Regex.IsMatch와 객체 생성 Regex.IsMatch 성능적인 차이가 있는지 테스트 진행하였습니다.
  • 성능 비교는 BenchMarkDotNet NuGet Package를 다운로드 받아서 성능 측정 비교하였습니다.


정정 표현식 Regex.IsMatch vs 객체 생성 Regex.IsMatch 성능 비교 예제 코드

  • 정적 표현식 Regex.IsMatch 와 객체 생성 Regex.IsMatch 성능 비교를 진행하도록 예제 코드를 작성하였습니다.
  • 간단한 정규표현식 pattern을 작성하고 input 데이터에서 패턴과 일치하는 것이 있는지 비교하는 예제 입니다.
  • 다만, 반복을 100,00000 번 진행하여 얼만큼의 성능 차이가 있는지 테스트 진행 하였습니다.
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Running;
using System.Text.RegularExpressions;

namespace RegexTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var summary = BenchmarkRunner.Run<RegexExpressionTest>();
        }
    }

    [MemoryDiagnoser]
    public class RegexExpressionTest
    {
        [Benchmark]
        public void RegexStaticIsMatchMethod()
        {
            const int count = 10000000;

            string pattern = @"^[a-z]+[0-9]+$";
            string input = "abcd1234";

            for(int index = 0; index < count; index++)
            {
                Regex.IsMatch(input, pattern);
            }
        }

        [Benchmark]
        public void RegexInstanceIsMatchMethod()
        {
            const int count = 10000000;

            string pattern = @"^[a-z]+[0-9]+$";
            string input = "abcd1234";
            Regex regex = new(pattern);

            for (int index = 0; index < count; index++)
            {
                regex.IsMatch(input);
            }
        }
    }
}


테스트 진행 결과

  • 테스트 진행 결과, 정적 Regex.IsMatch 방법보다 객체 생성을 통한 IsMatch 방법이 빠른 것을 확인하였습니다.
Method Mean Error StdDev Allocated
RegexStaticIsMatchMethod 1.504 s 0.0048 s 0.0045 s -
RegexInstanceIsMatchMethod 1.333 s 0.0037 s 0.0031 s 3,752 B


728x90

이 글을 공유하기

댓글

Designed by JB FACTORY