Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Stringlist mit 80.000 Einträgen schnell durchsuchen (https://www.delphipraxis.net/56560-stringlist-mit-80-000-eintraegen-schnell-durchsuchen.html)

jensw_2000 7. Nov 2005 21:46


Stringlist mit 80.000 Einträgen schnell durchsuchen
 
Hallo zusammen,

ich habe eine Stringlist mit ca. 80.000 Einträgen, die ich während eines Datenimports je nach Anzahl der Datensätze zwischen 5000 und 20.000 mal durchsuchen muss.
Pro Datensatz dauert der Test etwa 0,5 - 0,8 Sekunden.
Gibt es eine Lösung, um das Vorhandensein eines Eintrags schneller zu prüfen als so .... ?

Delphi-Quellcode:
function IstGesperrt(SL:TStringlist;SuchString:String):Boolean;
begin
  if sl.IndexOf(Suchstring)>-1 then
    result:=true else
    result:=false;
end


// Verwendung

While not ImportDataset.eof do
begin
  if not IstGesperrt(ImportDataset.fieldbyname('Stringfeld')) then ... Machwas;
  ImportDataset.next;
end;

Schöne Grüße,
Jens
:hi:

Jelly 7. Nov 2005 21:49

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen
 
Hilft es vielleicht, die StringList.Sorted := true zu setzen. Vielleicht ist Delphi ja schlau genug, bei sortierten Listen einen ertwas kleveren Suchalgo zu verwenden.

jensw_2000 7. Nov 2005 21:55

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen
 
Enorm.
Jetzt geht das genauso schnell wie ohne die zusätzliche Überprüfung. :spin2:

Danke :hi:

Bernhard Geyer 8. Nov 2005 07:16

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen
 
Noch besser (vor allem wenn noch viel mehr Einträge werden): balanced binary trees

Sharky 8. Nov 2005 07:28

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen
 
Hai Jens,

alzaimar hat hier mal eine Demo angehängt welches verschiedene Systeme vergleicht. Bei großen Mengen ist wohl seine Dictonary am schnellsten. Für kleinere Mengen (bis 40 000) ist die Skiplist schneller.

Da aber im Demo der Source vorhanden ist wäre das eventuell ein Ansatz für dich.

generic 8. Nov 2005 07:55

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen
 
es gibt da noch in delphi eine hashed stringlist.

vieleicht ist die schneller?

Sharky 8. Nov 2005 07:59

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen
 
Zitat:

Zitat von generic
...vieleicht ist die schneller?

Laut dem Demo von alzaimer war der Borland-Hash beim suchen sogar langsamer als die Sortedlist.

himitsu 8. Nov 2005 08:04

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen
 
Und in dem Thread, welcher alzaimar zur Erschaffung dieser Demo veranlasst hat, gibt es auch noch einige Diskusionen, wenn eventuell was besser ist.
Denn es kommt Teilweise auch mit darauf an wie mit der Liste gearbeitet wird. Also ob da öfters was an der Liste verändert und wie oft gesucht wird...

Ansonsten gibt es zumindestens noch ein paar weitere Tipps dort zu finden ^^
http://www.delphipraxis.net/internal...ct.php?t=65855

jensw_2000 8. Nov 2005 08:30

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen
 
Das sieht wirklich interessant aus.

Die Liste wird nur einmal beim Start des Importvorgangs aus einer Textdatei eingelesen.
Anschließend wird sie sehr oft durchsucht.

Bei Alzaimars TestlistSpeed wären die Skiplist und das Dictionary gute Alternativen zur Sorted List.

Ich werde heute Abend mal ein paar Versuche starten. :coder:

Danke an alle ...

:hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:00 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