Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   TStrings (ListBox.Items) ohne ".add" ? (https://www.delphipraxis.net/202701-tstrings-listbox-items-ohne-add.html)

Luckie 28. Nov 2019 22:37

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.

DieDolly 28. Nov 2019 22:49

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.

Luckie 28. Nov 2019 22:54

AW: TStrings (ListBox.Items) ohne ".add" ?
 
Kennt TListbox(.items) assign?

DieDolly 28. Nov 2019 23:01

AW: TStrings (ListBox.Items) ohne ".add" ?
 
Ja. Dauert damit noch immer 5,4 Sekunden.

MicMic 28. Nov 2019 23:04

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.

MicMic 28. Nov 2019 23:14

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

Michael II 28. Nov 2019 23:24

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

Zitat von MicMic (Beitrag 1452435)
Das mit ".add" ist auch nicht so schlimm. Dachte nur, evtl. spare ich eine Sekunde, wenn ich hunderttausende Einträge irgendwie direkt setzen kann, als es mit ".add" zu machen.

Ich bin zwar nicht sicher, was du genau suchst... aber 100'000 Einträge aufs Mal in eine Listbox quetschen geht enorm viel schneller (als mit .add) so:

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?

Uwe Raabe 28. Nov 2019 23:29

AW: TStrings (ListBox.Items) ohne ".add" ?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von MicMic (Beitrag 1452434)
@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
Delphi-Quellcode:
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.

DeddyH 29. Nov 2019 06:13

AW: TStrings (ListBox.Items) ohne ".add" ?
 
Welcher Benutzer scrollt eigentlich durch zigtausende Einträge?

hoika 29. Nov 2019 06:43

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

wenn ich hunderttausende Einträge
Und er soll sich bei Deinen 100.000-en Einträgen zurecht finden?

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 16:57 Uhr.
Seite 2 von 4     12 34      

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