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.
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen
Blogs
WebSocket in C++: Echtzeit-Anwendungen auf fortgeschrittenem Niveau
Bereitstellung einer JavaScript-Anwendung auf einer VPS: Erweiterte Schritt-für-Schritt-Anleitung
Ein Tag im Leben eines Swift-Entwicklers: Von der Kaffeetasse bis zum Deployment im App Store