Für das Bearbeiten von regulären Ausdrücken gibt es in VbScript das Objekt RegExp. Bei schlauer Anwendung von RegExp kann man für dieselbe Operation einen Geschwindigkeitsvorteil von mehr als Faktor 13 herausholen.
In der folgenden Tabelle stehen die Messwerte für obige Varianten, ermittelt direkt mit diesem Wiki auf zwei meiner Systeme:
Core2Duo | i7-4960X | |||||
---|---|---|---|---|---|---|
Test1 | Test2 | Test3 | Test1 | Test2 | Test3 | |
Loops/s | 12'000 | 86'000 | 168'000 | 8'100 | 175'000 | 315'000 |
Time μs | 83 | 12 | 6 | 123 | 5.7 | 3.2 |
Offensichtlich ist das Erzeugen eines RegExp-Objektes realtiv aufwändig. Alleine 71 μs von 83 μs gehen auf dieses Konto. Es lohnt sich also, wo immer möglich ein globales oder ein Member Objekt wiederzuverwenden.
Bei einer Zuweisung eines Pattern zu einem RegExp-Objekt muss dieses Pattern in eine interne Struktur kompiliert werden. Dies hängt natürlich sehr vom Pattern ab, aber in meinem Beispiel hat dies ca. 6 μs benötigt. In dieser Zeit kann das Pattern mit 2 langen Strings verglichen werden (777 und 224 Zeichen).
Wenn man also in einer Programmschleife verschiedene Strings immer wieder mit dem selben Pattern vergleichen muss, lohnt es sich, für jedes Pattern in der Schleife ein eigenes RegExp zu verwenden und die Pattern ausserhalb der Schleife zuzuweisen. Dazu ist es notwendig, das RegExp global anzulegen oder als Member einer Klasse.