Nach erheblicher Messung habe ich einen Hotspot in einem unserer Windows-Dienste identifiziert, den ich optimieren möchte. Wir verarbeiten Strings, die mehrere aufeinanderfolgende Leerzeichen enthalten können, und wir möchten nur auf einzelne Leerzeichen reduzieren. Wir verwenden eine statische kompilierte Regex für diese Aufgabe:
%Vor%und verwenden Sie es dann wie folgt:
%Vor% Diese Zeile wird mehrere Millionen Mal aufgerufen und erweist sich als ziemlich intensiv. Ich habe versucht, etwas besseres zu schreiben, aber ich bin ratlos. Angesichts der recht bescheidenen Verarbeitungsanforderungen der Regex ist sicherlich etwas schneller. Könnte unsafe
mit Zeigern weiter beschleunigen?
Bearbeiten:
Danke für die erstaunlichen Antworten auf diese Frage ... sehr unerwartet!
Wie wäre es damit ...
%Vor% Testlauf mit NUnit:
Testzeit ist in Millisekunden.
Bearbeiten:
Habe einige Tests gemacht und Guffas Methode "RemoveDuplicateSpaces" basierend auf StringBuilder hinzugefügt.
Meine Schlussfolgerung ist, dass die StringBuilder-Methode schneller ist, wenn es viele Leerzeichen gibt, aber mit weniger Leerzeichen ist die String-Split-Methode etwas schneller.
Ich bin gespannt, wie eine einfache Implementierung aussehen könnte:
%Vor%Sie konnten keine regulären Ausdrücke verwenden. Zum Beispiel:
%Vor%Mit dieser Methode und dem folgenden Testbett:
%Vor%Ich habe folgende Ergebnisse erhalten:
%Vor% Beachten Sie, dass dies nur mit einem sehr einfachen Beispiel getestet wurde. Es könnte weiter optimiert werden, indem der Aufruf von String.Trim
entfernt wird und nur dafür gesorgt wird, dass reguläre Ausdrücke manchmal nicht die beste Antwort sind.
Tags und Links string optimization c# regex