لماذا يعمل \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 يعمل