Por que \d em C# é mais lento que [0-9] e como corrigir isso?
Olá, colegas! Estou escrevendo um parser de logs em C# usando expressões regulares. Notei um comportamento estranho: quando uso \d para buscar dígitos, o desempenho cai várias vezes em comparação com [0-9].
Aqui está um exemplo de código que estou testando:
```csharp
using System;
using System.Diagnostics;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string input = string.Concat(Enumerable.Repeat("1234567890", 100000));
var sw = Stopwatch.StartNew();
for (int i = 0; i < 1000; i++)
{
Regex.Match(input, @"\d+");
}
sw.Stop();
Console.WriteLine($"\\d: {sw.ElapsedMilliseconds} ms");
sw.Restart();
for (int i = 0; i < 1000; i++)
{
Regex.Match(input, @"[0-9]+");
}
sw.Stop();
Console.WriteLine($"[0-9]: {sw.ElapsedMilliseconds} ms");
}
}
```
Os resultados me surpreenderam: \d funciona