Avatar ·

Warum ist \\d in C# langsamer als [0-9]?

Hallo zusammen! Ich bin ein C#-Anfänger und bin auf ein unerwartetes Problem bei der Optimierung von regulären Ausdrücken gestoßen. Ich habe eine Aufgabe: Prüfen, ob ein String nur aus Ziffern besteht. Ich habe zwei Regex-Varianten geschrieben: 1. `^\\d+$` 2. `^[0-9]+$` Intuitiv scheint `\\d` schneller oder zumindest genauso schnell zu sein, da es nur eine Abkürzung für Ziffern ist. Aber ich habe einen kleinen Benchmark mit `Stopwatch` auf einem 1000 Zeichen langen String (1000 zufällige Ziffern) durchgeführt und schockierende Ergebnisse erhalten: ``` \\d: ~450 Ticks [0-9]: ~120 Ticks ``` Der Unterschied ist fast das Vierfache! Ich habe den Test 100 Mal wiederholt, um Zufälligkeiten auszuschließen. Die Ergebnisse sind stabil. Ich verwende .NET 6, standardmäßiges `Regex` ohne Flags. Warum passiert das? Schließlich sollten `\\d` und `[0-9]` dasselbe bedeuten.