AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [Konzeptfrage] ist Listbox schneller zu durchsuchen?
Thema durchsuchen
Ansicht
Themen-Optionen

[Konzeptfrage] ist Listbox schneller zu durchsuchen?

Ein Thema von juergen · begonnen am 24. Sep 2008 · letzter Beitrag vom 26. Sep 2008
 
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.170 Beiträge
 
Delphi 11 Alexandria
 
#1

[Konzeptfrage] ist Listbox schneller zu durchsuchen?

  Alt 24. Sep 2008, 21:14
Hallo zusammen,

ich durchsuche per for-Schleife eine Listbox..
Ich muss eine Scheife nehmen, weil ich per Enter immer weiter suchen lasse.
Suchtext eingeben -> Enter -> 1. Ergebnis
Enter -> 2. Ergebnis wird angezeigt usw.

Das funktioniert soweit, dauert allerdinngs bei ca. 8000 Einträgen auch schon bis zu 13 Sekunden...
Meine Kernkomponenten innerhalb der Schleife sind:
Delphi-Quellcode:
type
  TSuche = record
    Text: AnsiString;
    ItemPos: integer;
    StrPos: integer;
  end;
//...

var
  i, NextPos: Integer;
  ItemText: AnsiString;
begin
  if Suche.ItemPos = -1 then
    Suche.ItemPos := 0;
  Suche.Text := AnsiUpperCase(Edit1.Text); // Edit1 = Suchtext

  for i := Suche.ItemPos to Pred(Search_Form.Listbox.Count) do
  begin
    ItemText := AnsiUpperCase(Search_Form.Listbox.Items.Strings[i]);
    if Suche.StrPos > 0 then
    begin
      NextPos := pos(Suche.Text, Copy(ItemText, Suche.StrPos +
        length(Suche.Text), length(ItemText) - Suche.StrPos));
      if NextPos > 0 then
        Suche.StrPos := Suche.StrPos + length(Suche.Text) + NextPos - 1
      else
        Suche.StrPos := 0;
    end
    else
      Suche.StrPos := pos(Suche.Text, ItemText);
....
Ich hatte schon einiges optimiert (ursprünglich 21 Sek), bin nun aber zu obigen Ergebnis gelangt und habe damit das für mich Machbare erreicht.

Besteht hier überhaupt noch eine Chance das Ganze wesentlich zu beschleunigen?
Verbesserungen um einzelne Prozentpünktchen sind zwar generell auch interessant, aber so richtig interesant wäre alles was mehr wie 15% bringen würde.
Gibt es vllt. eine ganz andere Vorgehensweise?

Ich hatte schon die Idee alles in eine Textdatei zu speichern und diese dann zu durchsuchen.
Das würde sehr schnell gehen, aber wie suche ich dann jeweils weiter ohne eine Schleife?


Danke schon mal vorab!
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
 


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 05:55 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