Avatar ·

لماذا يعمل \d في C# بشكل أبطأ من [0-9] وكيفية إصلاح ذلك؟

مرحبًا أيها الزملاء! أكتب محلل سجلات (log parser) في C# باستخدام التعبيرات النمطية. لاحظت سلوكًا غريبًا: عندما أستخدم \d للبحث عن الأرقام، ينخفض الأداء عدة مرات مقارنة بـ [0-9]. إليك مثال على الكود الذي أختبره: ```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"); } } ``` النتائج فاجأتني: \d يعمل