AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TStrings (ListBox.Items) ohne ".add" ?

Ein Thema von MicMic · begonnen am 28. Nov 2019 · letzter Beitrag vom 29. Nov 2019
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.648 Beiträge
 
Delphi 12 Athens
 
#1

AW: TStrings (ListBox.Items) ohne ".add" ?

  Alt 28. Nov 2019, 23:29
@hoika, danke für die Info. Gleich gelesen... nur 32767 Items. Zu wenig
Das gilt nur für Windows 95/98/Me!

Folgendes kleine Beispielprogramm füllt die Listbox mit 250000 Einträgen in 20 ms. Ein nicht-virtuelles Listbox1.Items.Add mit BeginUpdate/Endupdate braucht hier 1616 ms.

Faktisch wird beim lbVirtual auch das LB_SETCOUNT benutzt. lbVirtual gibt es auch als lbVirtualOwnerDraw.
Angehängte Dateien
Dateityp: zip Beispiel.zip (1,4 KB, 39x aufgerufen)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.659 Beiträge
 
Delphi 12 Athens
 
#2

AW: TStrings (ListBox.Items) ohne ".add" ?

  Alt 29. Nov 2019, 06:13
Welcher Benutzer scrollt eigentlich durch zigtausende Einträge?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
627 Beiträge
 
Delphi XE6 Enterprise
 
#3

AW: TStrings (ListBox.Items) ohne ".add" ?

  Alt 29. Nov 2019, 08:56
Welcher Benutzer scrollt eigentlich durch zigtausende Einträge?
Ich denke, das ist für die berühmte völlig unscharfe Suche (*). Direkt scrollt da keiner. Aber über der Liste sind ein oder mehrere Suchfelder. Und da gibt man grob ein, was man so weiß, und unten wird live aufgelistet, was da bei rum kommt. Den Rest regelt das Gedächtnis des Bearbeiters... Je nach Datenbank kann es schneller sein, einfach alle Datensätze in die Listbox zu prügeln und dort dann zu filtern.

Für uns hat da immer noch das gute alte ClientDataSet gereicht.


----
(*) "Kam der Kunde nicht aus Koblenz? Hat den nicht die Müller bearbeitet? War der Vorgang nicht 2014 im Mai?" man kennt das...
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TStrings (ListBox.Items) ohne ".add" ?

  Alt 29. Nov 2019, 09:05
Hallo,
Zitat:
Je nach Datenbank kann es schneller sein, einfach alle Datensätze in die Listbox zu prügeln und dort dann zu filtern.
Es ist bestimmt schneller, die in eine TStringList zu packen, als in eine TListBox.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.560 Beiträge
 
Delphi 12 Athens
 
#5

AW: TStrings (ListBox.Items) ohne ".add" ?

  Alt 29. Nov 2019, 09:25
@hoika, danke für die Info. Gleich gelesen... nur 32767 Items. Zu wenig
Das gilt nur für Windows 95/98/Me!

Folgendes kleine Beispielprogramm füllt die Listbox mit 250000 Einträgen in 20 ms. Ein nicht-virtuelles Listbox1.Items.Add mit BeginUpdate/Endupdate braucht hier 1616 ms.

Faktisch wird beim lbVirtual auch das LB_SETCOUNT benutzt. lbVirtual gibt es auch als lbVirtualOwnerDraw.
Das ist eindeutig die schnellste Variante.

Und wenn man statt

"FListBox1Items.Add(I.ToString);"

einfach nur

"FListBox1Items.Add('');"

nutzt, sind es nur ca. 7 ms...

Übrigens gibt es wohl tatsächlich Probleme mit dem Scrollbalken, wenn Über ca. 60.000 Zeilen hinaus gescrollt werden soll.

Für die Anzeige so vieler Elemente kann man aber z.B. ein StringGrid nehmen, das aber nicht selber die Daten hält, sondern nur im DrawEvent auf die passenden Daten zugreift, die gerade auf dem Bildschirm angezeigt werden sollen. Da gibt es keine Probleme...
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:09 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