Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TAdvStringGrid sehr langsam bei größeren Tabellen (https://www.delphipraxis.net/206442-tadvstringgrid-sehr-langsam-bei-groesseren-tabellen.html)

zeras 22. Dez 2020 13:07

TAdvStringGrid sehr langsam bei größeren Tabellen
 
Ich habe eine Excel Tabelle mit ca. 40.000 Zeile und 15 Spalten.
Diese lade ich ich in ein TAdvStringGrid mittels AdvGridExcelIO.
Das Laden an sich dauert nicht so sehr lange (ca. 10 sek.), aber die Manipulation der Daten dauert sehr lange.
Ich muss von Zeile zu Zeile gehen, dort Tests (diese dauern aber nicht lange) machen und dann teilweise die Farbe ändern und auch einen Zellinhalt in eine andere Zelle kopieren.
Bei ca. 100 Zeilen kein Problem, aber bei 40.000 habe ich nicht aufs Ende gewartet. Beim Abbruch war schon über eine Stunde vergangen.

Vor der Änderung habe ich
Delphi-Quellcode:
sgFileList.BeginUpdate;
eingefügt und am Ende dann
Delphi-Quellcode:
sgFileList.EndUpdate
.
Habt ihr eine Idee? Muss ich vielleicht die Exceltabelle in ein dynamisches Array schreiben und dann am Ende nur noch die Exceltabelle neu aufbauen?

Bernhard Geyer 22. Dez 2020 13:49

AW: TAdvStringGrid sehr langsam bei größeren Tabellen
 
Das AdvGrid sollte auch einen "virtual Mode" bieten.
Damit lösen sich sehr häufig Performenceprobleme die man bei einem "voll gefüllte/konfigurierten Grid" fast nie in den griff bekommt, wenn die Datenmenge zu groß ist.

zeras 24. Dez 2020 08:16

AW: TAdvStringGrid sehr langsam bei größeren Tabellen
 
Danke für den Hinweis. Da ich das nicht gefunden hatte, habe ich TMS kontaktiert. Man meinte, dass das viel schneller gehen müsste.
Nach einigen Stunden suche bin ich auf das Problem gestoßen.
Delphi-Quellcode:
BeginUpdate
und
Delphi-Quellcode:
EndUpdate
hatte ich ja am Anfang nicht drin. Das habe ich dann mit eingebaut. Leider ohne Erfolg.
Dann habe ich gesehen, dass ich in einer Schleife
Delphi-Quellcode:
sgFileList.AutoSize := True;
drin hatte. Das war das Problem.
Ich muss ja nur am Ende ein Autosize machen.
Nun dauern meine Berechnungen um die 10 Sekunden, was für mich OK ist.

Bernhard Geyer 24. Dez 2020 11:07

AW: TAdvStringGrid sehr langsam bei größeren Tabellen
 
Wenn ich nicht weiß wo etwas Zeit verbrät, nutze ich AQTime (https://smartbear.com/product/aqtime-pro/overview/) (haben die Kaufversion).
einmal mit Line-Profiler nur über die eigenen Units laufen lassen, schon hat man in den meisten fällen das Problem gleich gefunden.

Ob man es auch so schnell lösen kann ist eine andere Frage ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:53 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