AGB  ·  Datenschutz  ·  Impressum  







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

TListView - viele Daten - viel Zeit ...

Ein Thema von Marco Steinebach · begonnen am 16. Jul 2014 · letzter Beitrag vom 14. Okt 2018
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: TListView - viele Daten - viel Zeit ...

  Alt 17. Jul 2014, 14:42
Schau dir deinen Code nochmal genauer an.

Du rufst Items.Clear auf, obwohl du noch nicht Items.BeginUpdate aufgerufen hast.

Mach das und du wirst sehen, dass es schneller geht.

Das Wiederverwenden der ListItems spart auch noch eine Menge Zeit ein.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.869 Beiträge
 
Delphi 12 Athens
 
#2

AW: TListView - viele Daten - viel Zeit ...

  Alt 17. Jul 2014, 15:24
Auch hier poste ich einmal den Hinweis auf die VirtualTreeView:
http://www.jam-software.com/virtual-treeview/
Darin haben wir durchaus auch hunderttausende Einträge, die innerhalb weniger Millisekunden angezeigt werden. Oder z.B. 10000 Einträge, die absolut live bei der Eingabe eines Filters gefiltert werden.

Ich probiere heute Abend einmal das Beispiel von Sir Rufo darin aus.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: TListView - viele Daten - viel Zeit ...

  Alt 17. Jul 2014, 22:03
Könnte man den Thread nach Tutorial oder die CodeLibrary verschieben?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.869 Beiträge
 
Delphi 12 Athens
 
#4

AW: TListView - viele Daten - viel Zeit ...

  Alt 17. Jul 2014, 22:36
So, ich habe es nur ganz kurz gemacht, eigentlich könnte man das noch deutlich schöner machen. Ergebnisse jedenfalls:
Das Umschalten zwischen den beiden Listen benötigt bei 9000 Personen ca. 2ms
Der Refresh der Personen-Liste benötigt bei 9000 Personen ca. 2ms

Das Umschalten zwischen den beiden Listen benötigt bei 10000 Adressen ca. 2ms
Der Refresh der Adressen-Liste benötigt bei 10000 Adressen ca. 2ms

Das Projekt liegt im Anhang.

Füge ich die Daten direkt in die Knoten als Daten ein, dauern die Operationen ca. 10ms. Sprich anders als im Anhang:
Delphi-Quellcode:
procedure FillData(AListView: TVirtualStringTree; AContainer: TDataListContainer);
var
  i: Integer;
begin
  AListView.BeginUpdate;
  try
    AListView.Clear;
    if Assigned(AContainer.DataList) then
      for i := 0 to AContainer.DataList.Count - 1 do
        AListView.AddChild(nil, AContainer.DataList[i]);
  finally
    AListView.EndUpdate;
  end;
end;
Und:
Delphi-Quellcode:
procedure TForm6.VirtualStringTree1GetText(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
  var CellText: string);
var
  CurrentEntry: TObject;
begin
  CurrentEntry := TObject(Sender.GetNodeData(Node)^);
  if CurrentEntry is TPerson then
...
Angehängte Dateien
Dateityp: 7z VirtualList.7z (55,5 KB, 8x aufgerufen)
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
503 Beiträge
 
Delphi 5 Enterprise
 
#5

AW: TListView - viele Daten - viel Zeit ...

  Alt 18. Jul 2014, 08:42
...Du rufst Items.Clear auf, obwohl du noch nicht Items.BeginUpdate aufgerufen hast.

Mach das und du wirst sehen, dass es schneller geht.
jawoll, und wie ich das sehe! Dauert nur noch knapp die Hälfte an Zeit.
Meine Güte, manchmal programmiert man sich einen Mist zusammen, wie kann man denn erst Clear und dann BeginUpdate aufrufen ...
Vielen Dank!

Das Wiederverwenden der ListItems spart auch noch eine Menge Zeit.
Das kommt als nächstes - mal sehen wieviel es bringt...

Ich schau mir jetzt mal VirtualTreeview an - wenn das Ergebnis mit Screenreader gut auszulesen ist - warum nicht wechseln...

So hat sich auch, schlicht weil's nicht nötig ist, das Problem mit dem OwnerData gelöst .

Viele Grüße und ganz herzlichen Dank!
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.869 Beiträge
 
Delphi 12 Athens
 
#6

AW: TListView - viele Daten - viel Zeit ...

  Alt 18. Jul 2014, 11:17
Ich schau mir jetzt mal VirtualTreeview an - wenn das Ergebnis mit Screenreader gut auszulesen ist - warum nicht wechseln...
Ich weiß nicht, ob man das noch aktivieren muss, aber VTAccessibilityFactory als Unit existiert z.B., insofern gehe ich mal davon aus, dass auch Screenreader gehen könnten. Ausprobiert habe ich es nicht.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:15 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 by Thomas Breitkreuz