Laden...

Strings performant auf Gleichheit prüfen

Erstellt von steschu vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.473 Views
steschu Themenstarter:in
24 Beiträge seit 2009
vor 11 Jahren
Strings performant auf Gleichheit prüfen

Hallo,

Ich muss feststellen, ob sich Strings unterscheiden oder nicht. Dabei sind diese Strings durchaus längere Textblöcke (mehrere tausend Zeichen). Mir sind folgende Lösungen eingefallen, und möchte gerne wissen, welche Ihr davon für am performantesten haltet...

  1. String.Compare-Methode verwenden
  2. String mit "=" Operator vergleichen
  3. Strings mit MD5 codieren. Dabei würde von String2 bereits der MD5Hash bekannt sein - so, dass für den Vergleichsvorgang nur die Berechnung des MD5Hash von String1 nötig wäre. Die beiden Hash-Werte werden dann z.B. mit String.Compare verglichen...
  4. bei beiden Strings das char-Array parallel durchlaufen und char für char vergleichen, bei der ersten nicht-Übereinstimmung, foreach-Schleife abbrechen

Nochmal zur Klarstellung: Ich brauche als Rückgabe nur true oder false. Mich interessiert weder, was unterschiedlich ist, noch die Position der ersten Unterscheidung o.ä.

Viele Grüße,
Stephan

C
258 Beiträge seit 2011
vor 11 Jahren

string.Equals oder ==

bei "nur" mehreren tausend zeichen würde ich mir um Performance keine gedanken machen

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo steschu,

bei dem, was über das Szenario bekannt ist, also einem einfachen Vergleich von zwei Strings, klingt mir das sehr nach premature optimization, die ja bekanntlich "the root of all evil" ist.

Was anders ist es höchstens, wenn du alle Strings mit allen anderen vergleichen musst (um in einer Liste von Strings Duplikate zu finden). Das würde man darüber lösen, dass man alle Strings nach und nach mit Add einem HashSet hinzufügt und anhand des Rückgabewerts erkennt, ob der gerade hinzugefügte String schon vorhanden war.

herbivore

6.911 Beiträge seit 2009
vor 11 Jahren

Hallo steschu,

schau dir auch String.Intern Method (System)* an und messe die Varianten einfach durch, dann wirst du sehen ob es gravierende Unterschiede gibt od. ob es doch eine "premature optimization" ist. Das Ergebnis der Messung kannst du dann auch bitte hier posten.

* nach dem Internen einen Vergleich per object.ReferenceEquals durchführen um die Identitäten der Strings im String-Pool zu vergleichen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"