Microsoft 08.04.2020, 08:21 Uhr

Schnellere RegEx-Befehle in .NET 5.0

Mit .NET 5.0 soll die Ausführung von etlichen Regulären Ausdrücken um das drei- bis sechsfache schneller werden – in einigen Fällen sogar um ein vielfaches davon.
Mit .NET 5.0 (unten) sollen Reguläre Ausdrücke Programme nicht mehr ausbremsen
(Quelle: Microsoft.com)
Der Namensraum System.Text.RegularExpressions ist seit Jahren in .NET, bis zurück zu .NET Framework 1.1. Er wird an Hunderten von Stellen innerhalb der .NET-Implementierung selbst und direkt von Tausenden und Abertausenden von Anwendungen verwendet. In all diesen Bereichen ist er eine bedeutende Quelle für die CPU-Last. Wie Microsoft-Mitarbeiter Stephen Toub zugibt, hat der RegEx-Namensraum aus der Leistungsperspektive in den zurückliegenden Jahren von Microsoft nicht viel Zuwendung erhalten. Seine Caching-Strategie wurde im .NET Framework 2.0 geändert. In .NET Core 2.0 kam die Implementierung hinter RegexOptions.Compiled zurück (in .NET Core 1.x war die Option RegexOptions.Compiled ein Nop). .NET Core 3.0 profitierte davon, dass einige der Interna von Regex aktualisiert wurden, um Span zur Verbesserung der Speicherauslastung in bestimmten Szenarien zu verwenden. Und auf dem Weg dorthin haben einige von Microsoft sehr begrüßte Beiträge der Community gezielte Bereiche verbessert, beispielsweise mit dotnet/corefx#32899, die den Zugriff auf CultureInfo.CurrentCulture bei der Ausführung eines Ausdrucks von RegexOptions.Compiled | RegexOptions.IgnoreCase verringerten. Aber darüber hinaus ist die Implementierung weitgehend noch immer das, was sie vor 15 Jahren war.
Für .NET 5 – aktuell ist die Preview 2 – hat Microsoft jetzt wieder in einige bedeutende Verbesserungen der Regex-Engine investiert. Bei vielen Ausdrücken, so erläutert Stephen Toub in diesem Blogpost führen diese Änderungen routinemäßig zu einem um das 3- bis 6-fache verbesserten Durchsatz und in einigen Fällen zu viel mehr.
In seinem Beitrag erläutert Toub einige der unzähligen Änderungen, die am Namensraum System.Text.RegularExpressions in .NET 5 vorgenommen wurden im Detail. Dabei präsentiert auch Messwerte, welche die Beschleunigung der RegEx-Befehle dokumentieren.


Das könnte Sie auch interessieren