AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi DevExpress speed Probleme bei >=5000 Datensätze
Thema durchsuchen
Ansicht
Themen-Optionen

DevExpress speed Probleme bei >=5000 Datensätze

Offene Frage von "Tau"
Ein Thema von Tau · begonnen am 27. Jun 2005 · letzter Beitrag vom 30. Jun 2005
 
jensw_2000
(Gast)

n/a Beiträge
 
#4

Re: DevExpress speed Probleme bei >=5000 Datensätze

  Alt 27. Jun 2005, 03:39
Du verwendest das cxGrid nicht im Gridmode.
Das bedeutet, das sich das cxGrid im Modus "LoadAllRecords" befindet,
was wiederum bedeutet, das wirklich alle Datensätze aus der Datenquelle geladen, sortiert, in die MRU's und Dropdowns eingetragen und ggf. gefiltert werden.
Das dauert schon seine Zeit.
Wenn du das Grid mal testweise im Gridmode verwendest, wirst du feststellen, das es genauso schnell ist wie das DBGrid.

Da viele nette Features des cxGrids im Gridmode unbenutzbar sind, hier ein kleiner Tip zur Optimierung.

Ich habe einfach mal deine Action "procedure TFmHaupt.Action2Execute(Sender: TObject);" umgebaut.

Delphi-Quellcode:
procedure TFmHaupt.Action2Execute(Sender: TObject);
 var BeginTime: TDateTime;
     Zeit: Integer;
begin

 // Startzeit für Zeitmessung merken
 BeginTime := Now;

 // cxGrid Datacontroller in den Updatemode versetzen
 cxGrid1DBTableView1.DataController.BeginFullUpdate;

 // cxGrid Datacontroller SmartRefresh aktivieren
 cxGrid1DBTableView1.DataController.DataModeController.SmartRefresh:=true;

 // Nur zum Test... der GridMode
 // Kommentar entfernen um den Gridmode zu aktivieren
 // << den da :o) << cxGrid1DBTableView1.DataController.DataModeController.GridMode:=true;

 // Den Cursor der TAdoQuery auf ctOpenForwardOnly setzen
 // Das ermöglicht einen schnelleren sequentiellen Durchlauf
 DMHaupt.Q02.CursorType:=ctOpenForwardOnly;

 // Datenquelle (Query02) von der Datasource abhängen
 // Q02.disablecontrols wäre auch OK
 dsq2.DataSet:=nil;

 // Query öffnen
 DMHaupt.Q02.Open;

 // Datenquelle (Query02) wieder an die Datasource hängen
 dsq2.DataSet:=dmhaupt.Q02;

 // Den Cursor der TAdoQuery auf ctStatic zurücksetzen
 DMHaupt.Q02.CursorType:=ctStatic;

 // cxGrid Datacontroller aus dem Updatemode nehmen
 cxGrid1DBTableView1.DataController.EndFullUpdate;

 // Endzeit setzen und Dauer anzeigen
 Zeit := round((now - BeginTime) * 86400000);
 Label2.Caption := FormatFloat('#,###.##', Zeit) +' ms' +#10#13 +FormatFloat('#,##0.###', (Zeit / 1000)) +' s';

end;
Ich habe mir 170000 Testdatensätze erzeugt.
Mit dem Original-Code hat das Laden bei mit gut 19 Sekunden gedauert (im Gridmide ca. 650 ms).
So braucht das Grid noch 8-9 Sekunden (wovon bei mir allein das Öffnen der Query eine knappe Sekunde dauert).

Ich hoffe es hilft etwas.
Schöne Grüße,
Jens



[edit]
Falls deine Anwendung es erlaubt, könntest du ggf. auch darüber nachdenken, nur Teil-Datenmengen aus der DB
abzufragen. Meiner Meinung nach ist es nicht in jedem Fall sinnvoll, dem Anwender 170.000 Datensätze auf einmal
vorzuwerfen.
[/edit]
  Mit Zitat antworten Zitat
 


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 02:51 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