Avatar ·

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