[C# 문법] 정적 Regex, 객체 생성 Regex 성능 비교
- C#/C# 문법
- 2021. 12. 8. 18:52
참조
- https://docs.microsoft.com/ko-kr/dotnet/standard/base-types/best-practices
- https://stackoverflow.com/questions/414328/using-static-regex-ismatch-vs-creating-an-instance-of-regex
- https://docs.microsoft.com/en-us/dotnet/standard/base-types/compilation-and-reuse-in-regular-expressions?redirectedfrom=MSDN
정규표현식 정적표현식 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
'C# > C# 문법' 카테고리의 다른 글
[C# 벤치마크]BenchMarkDotNet 사용법 - RunStrategy 선택 (0) | 2021.12.13 |
---|---|
[C# 문법] Reference Tuple vs Value Tuple 성능 비교 (0) | 2021.12.08 |
[C# 문법] Dictionary ContainsKey vs TeyGetValue 성능 차이 (0) | 2021.12.07 |
[C#] NuGet Package 설정 파일 packages.config vs PackageReference 차이 (0) | 2021.12.06 |
[C# 함수형 프로그래밍] C# 대리자 결합 (멀티캐스트 대리자) (0) | 2021.12.02 |
이 글을 공유하기