![]() |
AW: TStrings (ListBox.Items) ohne ".add" ?
Bereite deine Daten so auf, dass du sie einzeln in einer Schleife in die Listbox schreiben kannst. Oder besser, schreib sie in eine Stringlist und Weise der Listbox zum Schluss die Stringlist zu.
|
AW: TStrings (ListBox.Items) ohne ".add" ?
250.000x ListBox1.Items.Add() = ~3,8 Sekunden
StringList, 250.000x sl.Add() und dann ListBox1.Items.AddStrings() = 5,7 Sekunden. |
AW: TStrings (ListBox.Items) ohne ".add" ?
Kennt TListbox(.items) assign?
|
AW: TStrings (ListBox.Items) ohne ".add" ?
Ja. Dauert damit noch immer 5,4 Sekunden.
|
AW: TStrings (ListBox.Items) ohne ".add" ?
Ich habe jetzt mal LB_SETCOUNT ($01A7) ausprobiert. Also "SendMessage(ListBox.Handle, $01A7, anzahl, 0);"
Auf der Microsoft Seite wird ja beschrieben, dass der Parameter wParam auf 16-Bit-Werte beschränkt ist. Also nicht mehr als 32767 Items steht da. Eine Info zu Windows 95/Windows 98/Windows Millennium Edition (Windows Me). Was andere BS-Versionen machen, steht da nicht. In nutze Windows 10 und habe es einfach mal probiert. Ein Test mit 136558 Items. Und es geht. Nun ohne ".add". Und es ist schneller :) Sollte ich es mit Vorsicht nutzen? Meine Anwendung muss jedenfalls nicht mit Windows 95/Windows 98/Windows Millennium Edition (Windows Me) kompatibel sein. |
AW: TStrings (ListBox.Items) ohne ".add" ?
Nachtrag: Das mit dem "LB_SETCOUNT" hat auch noch einen positiven Effekt. Mein ListBox.Clear ist dadurch auch um einiges schneller.
Gerade alles zu schön um wahr zu sein. Mal schauen ob ich dadurch neue Fehler entdecke *lach |
AW: TStrings (ListBox.Items) ohne ".add" ?
Zitat:
Delphi-Quellcode:
var hs : tstringlist;
i: Integer; begin hs := tstringlist.Create; try for i := 1 to 100000 do hs.Add( i.tostring ); listbox1.Items := hs; finally hs.Free; end; showmessage( listbox1.items.count.tostring ); end; Dabei habe ich soeben festgestellt, dass das Scrollen über den vertikalen Listbox-Scrollbalken nicht wirklich gut funktioniert. Ist das ein Delphi (10.3.3) oder ein Windows (Win10 19033) Problem? |
AW: TStrings (ListBox.Items) ohne ".add" ?
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Folgendes kleine Beispielprogramm füllt die Listbox mit 250000 Einträgen in 20 ms. Ein nicht-virtuelles
Delphi-Quellcode:
mit BeginUpdate/Endupdate braucht hier 1616 ms.
Listbox1.Items.Add
Faktisch wird beim lbVirtual auch das LB_SETCOUNT benutzt. lbVirtual gibt es auch als lbVirtualOwnerDraw. |
AW: TStrings (ListBox.Items) ohne ".add" ?
Welcher Benutzer scrollt eigentlich durch zigtausende Einträge?
|
AW: TStrings (ListBox.Items) ohne ".add" ?
Hallo,
Zitat:
Ganz klar der falsche Ansatz. Biete vorher einen Filter an, der die Anzahl eingrenzt und gut is. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:24 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