![]() |
AW: Performanteste Möglichkeit zur Prüfung ob zwei StringListen den gleichen Inhalt h
Ja genau. Die Möglichkeit ist die schnellste.
Zitat:
|
AW: Performanteste Möglichkeit zur Prüfung ob zwei StringListen den gleichen Inhalt h
Erst wenn der Count gleich ist, dann den Vergleich machen. Das hilft aber allein unter der Annahme, dass Leerzeilen in beiden Listen gewollt an der selben Stelle auftreten.
Du kannst auch zuerst mal ein Zeichen prüfen und falls die gleich sind den ganzen String und/oder die Länge usw... Wenn du erwartest, dass die Listen gleich sind und der Items.Count ident bringt das wenig. Zitat:
|
AW: Performanteste Möglichkeit zur Prüfung ob zwei StringListen den gleichen Inhalt h
Wieso nimmt man nicht einfach die Equals-Methode?
Bis auf die Prüfung ob man nicht die gleichen Instanzen vergleicht ist diese schon sehr schnell. |
AW: Performanteste Möglichkeit zur Prüfung ob zwei StringListen den gleichen Inhalt h
Du solltest vielleicht mal ausrechnen, wie schnell du aktuell bist.
Also du musst ja beide Listen komplett aud dem RAM in die CPU schaufeln, das heißt irgendwann kommst du da an das Limit von der Geschwindigkeit des RAM. Wenn die Lösung aus #9 da in die Nähe kommt, ist da eigentlich nicht viel zu verbessern. Falls sie es nicht tut, und es noch schneller gehe soll, müsstest du wohl auf assembler gehen und mit SSE-Anweisungen mehrere Bytes auf einmal vergleichen. Alternativ könntest du probieren, ein paar Durchläufe der Schleife zusammenzufassen. In etwa so:
Delphi-Quellcode:
Keine Ahnung, ob der Compiler soetwas inzwischen automatisch macht, aber das könnte noch ein paar Prozent Unterschied bringen.
var
i: Integer; maxi: Integer; begin Result := sl1.Count = sl2.Count; i := 0; maxi = (sl1.Count div 4) * 4; while Result and (i < maxi) do begin Result := Result or (sl1[i+0] = sl2[i+0]); Result := Result or (sl1[i+1] = sl2[i+1]); Result := Result or (sl1[i+2] = sl2[i+2]); Result := Result or (sl1[i+3] = sl2[i+3]); Inc(i, 4); end; while Result and (i < sl1.Count) do begin Result := sl1[i] = sl2[i]; Inc(i); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz