Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   QuantumGrid in Provider Mode und DataChanged: Performance-Problem (https://www.delphipraxis.net/165011-quantumgrid-provider-mode-und-datachanged-performance-problem.html)

romber 10. Dez 2011 11:44

Datenbank: TcxCustomDataSource • Version: 5 • Zugriff über: TcxCustomDataSource

QuantumGrid in Provider Mode und DataChanged: Performance-Problem
 
Hallo!

Ich habe hier ein DevExpress QuantumGrid, den ich in Provider Mode benutze und über ein von TcxCustomDataSource abgeleitetes Objekt sehr intensiv mit Daten befühle (bis zu 100 Datensätze/Sekunde). Jeden neuen Datensatz soll sofort im Grid angezeigt werden. Dafür rufe ich die Methode DataChanged des TcxCustomDataSource auf. Und genau hier habe ich ein Problem. Bei einer großen Menge der bereits vorhandenen Datensätzen friert mein Grid für mehre Sekunden ein. Das liegt wohl daran, dass beim Aufruf von DataChanged alle Datensätze neu geladen werden.

Gibt es eine Möglichkeit, nur den neu hinzugefügten Datensatz dem Grid hinzu zu fügen, ohne das jedesmal die ganzen Daten neu geladen werden?

Bebe 10. Dez 2011 14:20

AW: QuantumGrid in Provider Mode und DataChanged: Performance-Problem
 
Vielleicht helfen dir diese beiden Links.

http://www.devexpress.com/Support/Center/KB/p/A291.aspx

oder dieser

http://www.devexpress.com/Support/Center/p/DQ42284.aspx

Gruß
Matze

romber 10. Dez 2011 19:55

AW: QuantumGrid in Provider Mode und DataChanged: Performance-Problem
 
Vielen Dank für diese Links!

Das Problem ist, dass DataController meines Views keine Eigenschaft DataModeController hat. Ich vermute, dass diese Eigenschaft nur den DB-Varianten des Views zur Verfügung steht. Meine Grid ist an keine DB gebunden, ich nutze Provider Mode mit CustomDataSource.

Tyrolean 11. Dez 2011 16:07

AW: QuantumGrid in Provider Mode und DataChanged: Performance-Problem
 
Zitat:

Zitat von romber (Beitrag 1140725)
Hallo!

Ich habe hier ein DevExpress QuantumGrid, den ich in Provider Mode benutze und über ein von TcxCustomDataSource abgeleitetes Objekt sehr intensiv mit Daten befühle (bis zu 100 Datensätze/Sekunde). Jeden neuen Datensatz soll sofort im Grid angezeigt werden. Dafür rufe ich die Methode DataChanged des TcxCustomDataSource auf. Und genau hier habe ich ein Problem. Bei einer großen Menge der bereits vorhandenen Datensätzen friert mein Grid für mehre Sekunden ein. Das liegt wohl daran, dass beim Aufruf von DataChanged alle Datensätze neu geladen werden.

Gibt es eine Möglichkeit, nur den neu hinzugefügten Datensatz dem Grid hinzu zu fügen, ohne das jedesmal die ganzen Daten neu geladen werden?

Was passiert denn, wenn du einfach den Datensatz anhängst. Ich vermute mal so in der ARt

iREc := vDaten.DAtaController.AppendRecord;
vDaten.DataController.VAlues[iREc,0] := 'Datensatz ' + IntToStr(iRec);

Bei mir zeigt er einfach diesen neuen Datensatz an ohne was spezielles zu machen ...

Furtbichler 11. Dez 2011 17:45

AW: QuantumGrid in Provider Mode und DataChanged: Performance-Problem
 
Warum soll jeder Datensatz sofort sichtbar sein? Mehr als 20 Bildwechsel pro Sekunde bekommt das Auge doch sowieso nicht mit.

Verzichte auf das Datachanged bei jedem neuen Datensatz und erstelle stattdessen einen Timer, der das DataChanged mehrmals pro Sekunde aufruft. So kannst Du sicher sein, das dir auch bei 10000 Datensätzen/Sek. der Rechner nicht einfriert.

romber 11. Dez 2011 20:51

AW: QuantumGrid in Provider Mode und DataChanged: Performance-Problem
 
Zitat:

Zitat von Tyrolean (Beitrag 1140834)
Was passiert denn, wenn du einfach den Datensatz anhängst. Ich vermute mal so in der ARt

iREc := vDaten.DAtaController.AppendRecord;
vDaten.DataController.VAlues[iREc,0] := 'Datensatz ' + IntToStr(iRec);

Bei mir zeigt er einfach diesen neuen Datensatz an ohne was spezielles zu machen ...

Innerhalb der Append wird dann ebenfalls die DataChanged aufgerufen und alle Daten werden neu geladen. Man merkt's gar nicht, wenn nicht viele Datensätze hat.

Furtbichler 12. Dez 2011 06:27

AW: QuantumGrid in Provider Mode und DataChanged: Performance-Problem
 
Zitat:

Zitat von romber (Beitrag 1140864)
Innerhalb der Append wird dann ebenfalls die DataChanged aufgerufen...

Das ist korrekt, aber hier irrelevant: DataChanged wird im Setter der Value-Eigenschaft aufgerufen, um die Änderung des Zellinhaltes schtbar zu machen.

Zitat:

Zitat von romber (Beitrag 1140864)
..Man merkt's gar nicht, wenn nicht viele Datensätze hat.

Bei 100 Datensätzen pro Sekunde ist die Applikation dann doch ein wenig damit beschäftigt, den (zum größten Teil überflüssigen) Aktualisierungsanforderungen nachzukommen.

uligerhardt 12. Dez 2011 07:30

AW: QuantumGrid in Provider Mode und DataChanged: Performance-Problem
 
Das hilft dir jetzt aktuell nicht, aber du kannst ja mal für die Zukunft diese Suggestion tracken. (Tracken dient bei DevEx auch als Votingsystem.)

uligerhardt 12. Dez 2011 07:34

AW: QuantumGrid in Provider Mode und DataChanged: Performance-Problem
 
(Doppelmoppel. Bitte ignorieren. :oops:)

romber 12. Dez 2011 12:08

AW: QuantumGrid in Provider Mode und DataChanged: Performance-Problem
 
Zitat:

Zitat von uligerhardt (Beitrag 1140919)
Das hilft dir jetzt aktuell nicht, aber du kannst ja mal für die Zukunft diese Suggestion tracken. (Tracken dient bei DevEx auch als Votingsystem.)

Vielen Dank für das Link!

Das Problem ist ja allgemein bekannt, nur eine Lösung gibt's nach wie vor nicht. Ich habe auf dem DevExpress Forum mehrere Threads zu diesem Thema gefunden, einige bereits 2007 verfasst. Seit dem hat sich nichts getan in dieser Richtung. Ich habe gehofft, jemand hier hat sich vielleicht irgendwelche Tricks ausgedacht. Wäre schön...

Furtbichler 12. Dez 2011 17:44

AW: QuantumGrid in Provider Mode und DataChanged: Performance-Problem
 
Zitat:

Zitat von romber (Beitrag 1140973)
Ich habe gehofft, jemand hier hat sich vielleicht irgendwelche Tricks ausgedacht. Wäre schön...

Ich dachte eigentlich, Post #5 wäre ein Trick...

Wie viele Datensätze sind denn im Grid?

romber 19. Dez 2011 08:43

AW: QuantumGrid in Provider Mode und DataChanged: Performance-Problem
 
Zitat:

Zitat von Furtbichler (Beitrag 1141015)
Ich dachte eigentlich, Post #5 wäre ein Trick...

Das ist sogar ein sehr guter Trick, den verwende ich von Anfang an, ansonsten wäre meine Anwendung unbrauchbar. Funktioniert ganz gut.

Zitat:

Zitat von Furtbichler (Beitrag 1141015)
Wie viele Datensätze sind denn im Grid?

Im Grid können bis zu 10.000 Datensätze sein.
Und trotzdem ist es ein großer Nachteil, wenn eine relativ teure Komponente keine einfache Möglichkeit bietet, die neue Records hinzuzufügen, ohne gleich den ganzen DataSet neu zu laden. Falls jemand eine Lösung hat, werde ich sehr dankbar!

Viele Dank!

Iwo Asnet 19. Dez 2011 11:05

AW: QuantumGrid in Provider Mode und DataChanged: Performance-Problem
 
Wenn du ganz ohne TcxCustomDatasource arbeitest, und die Daten gleich in die Records schreibst, geht es bei weitem am Schnellsten.

Außerdem gibt es noch dieses 'SmartRefresh' und 'GridMode' in den DataController.DataModeController-Optionen, vielleicht bringt das was.

Ich verwende ein TcxGridTableView als Datencontainer (schwerer Verstoß gegen 'Trenne Funktion und Darstellung'), um Logdaten tonnenweise einzulesen. Da kommen schon einige 10.000 zusammen. mir reicht die Performance aus, aber ich habe nicht probiert, was passiert, wenn man das Grid schon sieht und daten hinzukommen... Schlimm wird das aber nicht sein.

Im Übrigen ist (vielleicht) wirklich etwas faul, wenn Du 10.000 recs anzeigen musst. Wieso reicht nicht ein Ausschnitt? Die Daten an sich kannst Du ja komplett vorhalten, aber wenn Du z.B. im customDatasource immer nur die letzten 1000 darstellst (default) und nur bei Bedarf (in einem 2.Grid?) eine größere Menge?

Ich würde mal mit dem GridMode und SmartRefresh spielen...

romber 19. Dez 2011 16:16

AW: QuantumGrid in Provider Mode und DataChanged: Performance-Problem
 
Zitat:

Zitat von Iwo Asnet (Beitrag 1142185)
Ich würde mal mit dem GridMode und SmartRefresh spielen...

Ich auch, nur leider stehen diese beide Optionen nur für DB-basierte Views zur Verfügung, das ist das Problem. :-( Trodzdem vielen Dank für diesen Typ!

Ganz ohne TcxCustomDataSource habe ich auch probiert und musste einen enormen Speicherverbrauch fesrstellen.

Furtbichler 19. Dez 2011 18:22

AW: QuantumGrid in Provider Mode und DataChanged: Performance-Problem
 
Also ich hab das hier mal getestet. Das ist sauschnell, auch bei 10000 records (5 Spalten).

Ich hatte mal den Fall, das eine Datumsspalte mit einer entsprechenden Properties-Eigenschaft das Teil verdammt lahm gemacht hat.

Um wie viele Spalten handelt es sich... Ich vermute, die Bremse ist woanders zu suchen...


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