AW: String in TStringList finden verschnellern?
Das gibt einem zu denken. Danke für die ausführliche Erklärung!
Eine Frage habe ich noch. Wenn man sorted auf True setzt, ist das hinzufügen zur Liste deutlich langsamer und Einträge die schon vorhanden sind werden ignoriert. Spielt es eine Rolle, ob ich Sorted vor oder nach dem Hinzufügen all meiner Einträge auf True setze? |
AW: String in TStringList finden verschnellern?
Also:
Delphi-Quellcode:
so sollte es gehen
sl := Tstringlist.create;
sl.Duplicates = dupAccept; // Damit Duplicate erlaubt sind // Alles einfügen // dann sl.sorted := true; // Sortiert die Liste |
AW: String in TStringList finden verschnellern?
Wenn Sorted = true muss beim Einfügen geschaut werden, wo der neue Eintrag hin muss, damit er dort eingefügt werden kann.
Statt Sorted = true könntest Du mal probieren, ob der Aufruf von Sort vor der Stelle, ab der Du suchen willst, etwas bringt. Du muss dann aber an der Stelle mit etwas Wartezeit rechnen. Man kann für den Fall dann auch eine eigene Sortierroutine zuweisen, die eventuell auch das Laufzeitverhalten ändern könnte. |
AW: String in TStringList finden verschnellern?
Habe es nun testen können. Funktioniert einwandfrei, Sort; erst später aufzurufen und Sorted zu setzen (habe einfach beides gemacht).
Die Wartezeit für das "manuelle Sortieren" der Liste im Nachhinein mit dem Aufruf durch Sort; oder dem Setzen von Sorted := True ist sehr viel kürzer als die die entsteht, wenn man es bereits vorher so einstellt. |
AW: String in TStringList finden verschnellern?
Zitat:
Delphi-Quellcode:
ruft intern sowieso ein
Sorted := true
Delphi-Quellcode:
auf, das nun aber nichts mehr verändert. Probier mal, ob es noch etwas schneller ist, wenn du den expliziten
Sort
Delphi-Quellcode:
-Aufruf weglässt.
Sort
|
AW: String in TStringList finden verschnellern?
Zitat:
Ich hatte extra noch den STRG+Linksklick auf .Sorted gemacht um danach zu suchen. Bin aber erst daran gescheitert es zu finden. Bis
Delphi-Quellcode:
bin ich gekommen und habe dort dann diese wunderschöne Zeile
procedure TStringList.SetSorted(Value: Boolean);
Delphi-Quellcode:
übersehen.
if Value then Sort;
Ich werde das später mal mit der TStopWatch prüfen. |
AW: String in TStringList finden verschnellern?
Zitat:
Code:
...
if (V = 0) then begin Gefunden; Break; end; if (V < 0) then SuchindexNachUnten; else SuchindexNachOben; ... |
AW: String in TStringList finden verschnellern?
oder so:
Delphi-Quellcode:
Grüße
case v of
low(Integer) .. -1: SuchIndexNachUnten; 0: Gefunden; 1 .. high(Integer): SuchIndexNachOben; end; Klaus |
AW: String in TStringList finden verschnellern?
Zitat:
|
AW: String in TStringList finden verschnellern?
@a.def
wenn du mit
Delphi-Quellcode:
arbeitest, dann mußt Du noch eine Behandlung von doppelten Datensätzen mit einbauen z.B.
.sorted:=True;
Delphi-Quellcode:
Gruß
.Duplicates:=dupIgnore;
K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz