AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Stringlist mit 80.000 Einträgen schnell durchsuchen
Thema durchsuchen
Ansicht
Themen-Optionen

Stringlist mit 80.000 Einträgen schnell durchsuchen

Ein Thema von jensw_2000 · begonnen am 7. Nov 2005 · letzter Beitrag vom 8. Nov 2005
Antwort Antwort
jensw_2000
(Gast)

n/a Beiträge
 
#1

Stringlist mit 80.000 Einträgen schnell durchsuchen

  Alt 7. Nov 2005, 22:46
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
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen

  Alt 7. Nov 2005, 22:49
Hilft es vielleicht, die StringList.Sorted := true zu setzen. Vielleicht ist Delphi ja schlau genug, bei sortierten Listen einen ertwas kleveren Suchalgo zu verwenden.
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#3

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen

  Alt 7. Nov 2005, 22:55
Enorm.
Jetzt geht das genauso schnell wie ohne die zusätzliche Überprüfung.

Danke
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen

  Alt 8. Nov 2005, 08:16
Noch besser (vor allem wenn noch viel mehr Einträge werden): balanced binary trees
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen

  Alt 8. Nov 2005, 08:28
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#6

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen

  Alt 8. Nov 2005, 08:55
es gibt da noch in delphi eine hashed stringlist.

vieleicht ist die schneller?
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen

  Alt 8. Nov 2005, 08:59
Zitat von generic:
...vieleicht ist die schneller?
Laut dem Demo von alzaimer war der Borland-Hash beim suchen sogar langsamer als die Sortedlist.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#8

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen

  Alt 8. Nov 2005, 09:04
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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#9

Re: Stringlist mit 80.000 Einträgen schnell durchsuchen

  Alt 8. Nov 2005, 09:30
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.

Danke an alle ...

  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02: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