Just how much does the RegexOptions.Compiled flag improve regular expression performance in .NET? The answer: a lot! People have spoken about this before, but below are some more numbers to how you just how much it matters!
Performance Stats
Character Count | Regex Pattern |
---|---|
1 |
[a-z]
|
3 |
[b-y].[1-8]
|
5 |
[b-y].[c-x].[1-8].[2-7]
|
7 |
[b-y].[c-x].[d-w].[1-8].[2-7].[3-6]
|
9 |
[b-y].[c-x].[d-w].[e-v].[1-8].[2-7].[3-6].[4-5]
|
RegexOptions | 1 | 3 | 5 | 7 | 9 |
---|---|---|---|---|---|
None | 234176 | 285067 | 653016 | 690282 | 687343 |
Compiled | 193945 | 235213 | 430609 | 452483 | 454625 |
Percent Gain | 17% | 17% | 34% | 34% | 34% |
Test Code
public class RegexPerformanceTests
{
[Fact]
public void Test()
{
TestPattern("[a-z]");
TestPattern("[b-y].[1-8]");
TestPattern("[b-y].[c-x].[1-8].[2-7]");
TestPattern("[b-y].[c-x].[d-w].[1-8].[2-7].[3-6]");
TestPattern("[b-y].[c-x].[d-w].[e-v].[1-8].[2-7].[3-6].[4-5]");
}
private void TestPattern(string pattern)
{
Console.WriteLine("--- " + pattern + " ---");
var regex1 = new Regex(pattern);
TestRegex(regex1);
Console.WriteLine("--- Compiled ---");
var regex2 = new Regex(pattern, RegexOptions.Compiled);
TestRegex(regex2);
}
private void TestRegex(Regex regex)
{
const int count = 100000;
var sw = Stopwatch.StartNew();
for (var x = 0; x < count; x++)
{
var guid = Guid
.NewGuid()
.ToString();
regex.IsMatch(guid);
}
sw.Stop();
Console.WriteLine(sw.ElapsedTicks);
}
}
Enjoy,
Tom
No comments:
Post a Comment