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 FMX StringGrid sehr langsam (https://www.delphipraxis.net/210936-fmx-stringgrid-sehr-langsam.html)

Medium 1. Jul 2022 10:38

FMX StringGrid sehr langsam
 
Moin zusammen.

Ich stelle in einem TStringGrid (FMX) eine Meldungsliste für Prozesszustände in einer industriellen Anlage dar. Das können schon mal recht viele werden, und wenn man diese Liste wirklich braucht (lies: falls mal richtig etwas schief gelaufen ist), sollte man in dieser auch z.B. alle Meldungen der letzten 2-3 Tage ungefiltert darstellen und durchscollen können. So wahnsinnig viele sind es auch wieder nicht, ca. 1000-2000 pro Tag maximal.

Das Abrufen dieser Daten aus der DB ist sehr zügig, allerdings braucht das Grid ewig mit der Darstellung. Fast schon eine ganze Minute wenn man es mal testhalbar übertreibt und ca. 10000 Datensätze abruft.

Ich nutze das OnDrawColumnCell Event um die Zeilen anhand eines Wertes in der jeweiligen Zeile zu färben (FillRect), und lasse von DefaultDrawCell() dann den Rest erledigen. Also auch nichts wildes denke ich.
Mir scheint, als würde das Grid versuchen alle Zeilen zu zeichnen, auch wenn diese gerade überhaupt nicht im sichtbaren Bereich liegen. Das ist aber nur eine Vermutung.

Kann ich irgend etwas tun, doch potenziell tausende Zeilen scrollbar bereitzustellen, das ganze aber in benutzbarer Geschwindigkeit zu halten?
Ich habe früher mit dem TMS Grid für genau denselben Zweck gearbeitet, und damit keine solchen Probleme gehabt.

(Delphi 10.2.3, Anbindung des Grids an eine UNIDAC TMyQuery via LiveBindings)

DeddyH 1. Jul 2022 12:34

AW: FMX StringGrid sehr langsam
 
Ich habe damals die KernowSoftware FMX-Komponenten benutzt, allerdings scheinen die nicht mehr weiter gepflegt zu werden. Naja, das ist einer der Gründe, weshalb ich mich von FMX verabschiedet habe, ich will das hier nicht weiter vertiefen.

RonaldK 4. Jul 2022 10:32

AW: FMX StringGrid sehr langsam
 
Zitat:

Zitat von Medium (Beitrag 1508256)
Moin zusammen.
Kann ich irgend etwas tun, doch potenziell tausende Zeilen scrollbar bereitzustellen, das ganze aber in benutzbarer Geschwindigkeit zu halten?

Das ist wohl ein fundamentales Problem mit FMX.
DevExpress hat die Weiterentwicklung in diesem Bereich auch eingestellt.
Performance ist auch hier, eines der Gründe:
https://community.devexpress.com/blo...ure-plans.aspx

Zudem erzeugen die Delphi Nexgen Compiler, auch noch den langsamsten Code.
Hier bessert Delphi leider auch nicht mehr nach.

Mavarik 4. Jul 2022 16:23

AW: FMX StringGrid sehr langsam
 
emm...

TGrid ist turbo schnell - besonder weil die Datenhaltung extern ist.
Es wird immer nur das vom Model abgerfragt was auch dargestellt werden muss..

Ich habe unter FMX StringGrid nie verwenden, daher würde ich Dir vorschlagen mal das TGrid zu versuchen.

Mavarik

Medium 5. Jul 2022 13:33

AW: FMX StringGrid sehr langsam
 
Das klingt erstmal sehr interessant! Das einzige Problem das ich damit jetzt aber habe ist, dass ich anhand eines Wertes in meinen Zellen meine Zeilen unterschiedlich färben möchte. OnDrawColumnBackground klingt erstmal nach einem guten Ereignis dafür, aber leider komme ich ja gerade durch den von dir benannten Vorteil nicht mehr so einfach an die Daten ran - es gibt gar keine Cells[] Property! Wie kann man das denn damit dann lösen? Für jede Zeile immer wieder in meiner DB nachschauen erscheint mir auch nicht wirklich eine performante Sache zu sein =)

Edit: Habs darüber gelöst, indem ich den Datensatz meiner Query anhand der Row setze. Irgendwie war mir so, als wäre TQuery.RecNo mal ReadOnly gewesen, aber scheinbar geirrt. Das ist ziemlich flott jetzt, danke!


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