3 Stimmen

Alternativen zu String.Compare für Leistungsfähigkeit

Ich habe einen Profiler auf meiner C#-Anwendung verwendet und festgestellt, dass String.Compare() insgesamt viel Zeit in Anspruch nimmt: 43% der Gesamtzeit mit 124M Aufrufen

Ich vergleiche relativ kleine Zeichenfolgen: von 4 bis 50 Zeichen. Was würden Sie empfehlen, um es in Bezug auf die Leistung zu ersetzen??

UPD: Ich muss nur entscheiden, ob 2 Zeichenfolgen gleich sind oder nicht. Zeichenfolgen können null oder "" sein. Kein kultureller Aspekt oder sonst irgendein Aspekt. Meistens wird es "4578D" im Vergleich zu "1235E" oder ähnlichem sein.

Vielen Dank im Voraus!

4voto

Jon Skeet Punkte 1325502

Es kommt darauf an, welche Art von Vergleich du machen möchtest. Wenn es dir nur um Gleichheit geht, dann verwende eine der Überladungen von Equals - zum Beispiel ist es schneller zu finden, dass zwei Strings unterschiedliche Längen haben, als ihre Inhalte zu vergleichen.

Wenn du mit einem ordinalen Vergleich zufrieden bist, spezifiziere dies explizit:

int result = string.CompareOrdinal(x, y);

Ein ordinaler Vergleich kann viel schneller sein als ein kultursensibler.

Natürlich setzt das voraus, dass ein ordinaler Vergleich das gewünschte Ergebnis liefert - Richtigkeit ist normalerweise wichtiger als Leistung (obwohl nicht immer).

EDIT: Okay, also du möchtest nur auf Gleichheit testen. Ich würde einfach den == Operator verwenden, der einen ordinalen Gleichheitsvergleich verwendet.

1voto

Guffa Punkte 663241

Sie können verschiedene Möglichkeiten verwenden, um Zeichenfolgen zu vergleichen.

String.Compare(str1, str2, StringComparison.CurrentCulture) // Standard
String.Compare(str1, str2, StringComparison.Ordinal) // schnellste

Ein ordinaler Vergleich kann etwa doppelt so schnell sein wie ein kultursensitiver Vergleich.

Wenn Sie einen Vergleich auf Gleichheit durchführen und die Zeichenfolgen keine kultursensitiven Zeichen enthalten, können Sie sehr gut einen ordinalen Vergleich verwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X