![]() |
Performance ListView vs. StringGrid
Hallo.
Ich hätte es ja nicht für möglich gehalten, aber beim eintragen von ca 3000-5000 Zeilen a 7-10 Spalten ist ein ListView nicht zu gebrauchen. Das Eintragen dauert ca 5 Minuten (oder eher mehr) auf einem P4 mit 3GHZ, wobei ein Stringgrid in ein paar Sekundengefüllt ist. Eintargen tun wir die Daten wie folgt:
Delphi-Quellcode:
Wie gesagt ein grobes Beispiel.
var nitem:TListItem;
begin . . c:=3000; for i:=1 to c do begin nitem:=ListView1.items.add; nitem.caption:=inttostr(i); nitem.subitems.add(inttostr(i)+'-1'); nitem.subitems.add(inttostr(i)+'-2'); nitem.subitems.add(inttostr(i)+'-3'); end; vielleicht ist die Logik auch nur verkehrt. Sven |
Re: Performance ListView vs. StringGrid
BeginUpdate/EndUpdate nicht vergessen.
Sonst wird nach jedem Datensatz das ListView neu gezeichnet |
Re: Performance ListView vs. StringGrid
Hallo
5 Minuten? das ist arg viel, das liegt nicht bloß am Füllen, wo kommen die Daten her? Geschwindigkeit bringt u.a.:
Delphi-Quellcode:
außerdem solltest du die Spaltenbreiten nicht automatisch anpassen lassen (columntextwidth etc.), das kostet auch immens viel Zeit, vormn Füllen einfach wieder auf feste Werte setzten und nach dem Befüllen wieder anpassen lassen.
listview1.Items.BeginUpdate;
... Befüllen ... listview1.Items.endUpdate; Oder du schaust dir die Verfahrensweise bei virtuellen Listviews an. Mfg Frank |
Re: Performance ListView vs. StringGrid
Virtuelle Listviews sind sowieso am schnellsten 'befüllt', das würde ich ja machen.
|
Re: Performance ListView vs. StringGrid
Zitat:
Die Listview wird auch vor dem show befüllt. Sven |
Re: Performance ListView vs. StringGrid
Zitat:
Aber wie gesagt, aus der gleichen Quelle wird auch das Stringgrid befüllt Zitat:
Zitat:
Werde das nachher direkt einmal testen und das automtische Anpassen der Spalten erst im nachhinein machen. Sven |
Re: Performance ListView vs. StringGrid
Zitat:
- Virtuelle ListView (Beispiel in Demoverzeichis von Delphi dabei) - VirtualTreeStringGrid (Is jedoch mit einigen Aufwand verbunden sich damit auseinanderzusetzen) - ![]() |
Re: Performance ListView vs. StringGrid
Delphi-Quellcode:
sollte auch schon ein wenig bringen!
var nitem:TListItem;
zahl:string; begin . . c:=3000; for i:=1 to c do begin zahl:=inttostr(i); //<- nur einmal anstatt 4 mal! nitem:=ListView1.items.add; nitem.caption:=zahl; nitem.subitems.add(zahl+'-1'); nitem.subitems.add(zahl+'-2'); nitem.subitems.add(zahl+'-3'); end; |
Re: Performance ListView vs. StringGrid
Zitat:
ich habe es eben mal getestet: ListView mit 7 Columns und 3000 Zeilen. Ohne BeginUpdate ca. 2.5 Sekunden. Mit BeginUpDate 1.7 sekunden. |
Re: Performance ListView vs. StringGrid
Zitat:
Das war ein Beispiel wie ich genau den Inhalt in das ListView bekomme. @sharky Wie gesagt es könnte an dem automatischen Anpassen der Spaltenbreite liegen. Das sind Postleitzahlen + Namen aus einer Datenbank. Sprich sehr unterschiedliche größen. Ich kam leider eben nicht mehr dazu es zu testen. Ich habe mir mal fix das Demo zu den Virtuellen ListViews angeschaut und das kommt mir sehr vertraut vor. Wenn ich das richtig gesehen hab, ist dabei das Daten und Ausgabe Modell getrennt. Die Logik kenne ich aus Cocoa und hatte sie eigentlich vermisst beim TListView. Hier zuhause kann ich es nicht testen, da ich hier keine Windows Maschine hab. Aber ich berichte dann am Montag. Sven |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:52 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