AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Performance ListView vs. StringGrid

Ein Thema von Sven Janssen · begonnen am 12. Aug 2005 · letzter Beitrag vom 12. Aug 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Sven Janssen
Sven Janssen

Registriert seit: 22. Jun 2004
Ort: Mayen
187 Beiträge
 
Delphi 4 Professional
 
#1

Performance ListView vs. StringGrid

  Alt 12. Aug 2005, 14:40
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:
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;
Wie gesagt ein grobes Beispiel.
vielleicht ist die Logik auch nur verkehrt.

Sven
:wq /dev/null
He who fights with monsters might take care lest he thereby become a monster - Nietzsche
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Performance ListView vs. StringGrid

  Alt 12. Aug 2005, 14:45
BeginUpdate/EndUpdate nicht vergessen.
Sonst wird nach jedem Datensatz das ListView neu gezeichnet
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

Re: Performance ListView vs. StringGrid

  Alt 12. Aug 2005, 14:47
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:
listview1.Items.BeginUpdate;
...
Befüllen
...
listview1.Items.endUpdate;
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.
Oder du schaust dir die Verfahrensweise bei virtuellen Listviews an.

Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: Performance ListView vs. StringGrid

  Alt 12. Aug 2005, 14:49
Virtuelle Listviews sind sowieso am schnellsten 'befüllt', das würde ich ja machen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Sven Janssen
Sven Janssen

Registriert seit: 22. Jun 2004
Ort: Mayen
187 Beiträge
 
Delphi 4 Professional
 
#5

Re: Performance ListView vs. StringGrid

  Alt 12. Aug 2005, 14:53
Zitat von Bernhard Geyer:
BeginUpdate/EndUpdate nicht vergessen.
Sonst wird nach jedem Datensatz das ListView neu gezeichnet
ja sorry, ist natürlich gesetzt.
Die Listview wird auch vor dem show befüllt.

Sven
:wq /dev/null
He who fights with monsters might take care lest he thereby become a monster - Nietzsche
  Mit Zitat antworten Zitat
Benutzerbild von Sven Janssen
Sven Janssen

Registriert seit: 22. Jun 2004
Ort: Mayen
187 Beiträge
 
Delphi 4 Professional
 
#6

Re: Performance ListView vs. StringGrid

  Alt 12. Aug 2005, 14:56
Zitat von Keldorn:
Hallo

5 Minuten? das ist arg viel, das liegt nicht bloß am Füllen, wo kommen die Daten her?
Aus einem TIBDataSet.
Aber wie gesagt, aus der gleichen Quelle wird auch das Stringgrid befüllt
Zitat:

Geschwindigkeit bringt u.a.:
Delphi-Quellcode:
listview1.Items.BeginUpdate;
...
Befüllen
...
listview1.Items.endUpdate;
Sorry hatte ich vergessen zu poste. Wird immer gesetzt.
Zitat:
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.
und genau da könnte das Problem liegen. Genau das mache ich nämlich.
Werde das nachher direkt einmal testen und das automtische Anpassen der Spalten erst im nachhinein machen.

Sven
:wq /dev/null
He who fights with monsters might take care lest he thereby become a monster - Nietzsche
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Performance ListView vs. StringGrid

  Alt 12. Aug 2005, 14:57
Zitat von Sven Janssen:
Zitat von Bernhard Geyer:
BeginUpdate/EndUpdate nicht vergessen.
Sonst wird nach jedem Datensatz das ListView neu gezeichnet
ja sorry, ist natürlich gesetzt.
Die Listview wird auch vor dem show befüllt.

Sven
Dann hätte ich noch folgendes Anzubieten:

- Virtuelle ListView (Beispiel in Demoverzeichis von Delphi dabei)
- VirtualTreeStringGrid (Is jedoch mit einigen Aufwand verbunden sich damit auseinanderzusetzen)
- TElTree (Kostet jedoch ein paar €, dafür fast identisch zu TTreeView zu programmieren)
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von ibp
ibp

Registriert seit: 31. Mär 2004
Ort: Frankfurt am Main
1.511 Beiträge
 
Delphi 7 Architect
 
#8

Re: Performance ListView vs. StringGrid

  Alt 12. Aug 2005, 14:58
Delphi-Quellcode:
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;
sollte auch schon ein wenig bringen!
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Performance ListView vs. StringGrid

  Alt 12. Aug 2005, 15:00
Zitat von Sven Janssen:
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) ...
Hai Sven,

ich habe es eben mal getestet:
ListView mit 7 Columns und 3000 Zeilen. Ohne BeginUpdate ca. 2.5 Sekunden. Mit BeginUpDate 1.7 sekunden.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Sven Janssen
Sven Janssen

Registriert seit: 22. Jun 2004
Ort: Mayen
187 Beiträge
 
Delphi 4 Professional
 
#10

Re: Performance ListView vs. StringGrid

  Alt 12. Aug 2005, 16:10
Zitat von ibp:
Delphi-Quellcode:
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;
sollte auch schon ein wenig bringen!
hehe, ne Du das ist nicht der Code aus dem Programm.
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
:wq /dev/null
He who fights with monsters might take care lest he thereby become a monster - Nietzsche
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 07:43 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