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 26. Jun 2005 · letzter Beitrag vom 30. Jun 2005
Antwort Antwort
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#1

DevExpress speed Probleme bei >=5000 Datensätze

  Alt 26. Jun 2005, 23:15
Datenbank: MS Access • Version: 2003 • Zugriff über: ADO
Hallo Leute

habe riesige Probleme mit dem cxGrid was Geschwindigkeit an belangt.

habe ein kleines anschauungs- Beispiel angehängt.

Ist aber leider 1,6MB groß wegen der Demo Daten.

kann mir jemand einen Tipp geben wie ich die
Geschwindigkeit beim laden der Daten massiv verbessern kann.

Für einen Tipp währe ich sehr Dankbar.

schöne Grüsse
Tau
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
Benutzerbild von MagicAndre1981
MagicAndre1981

Registriert seit: 4. Jun 2004
Ort: Nordhausen
2.214 Beiträge
 
Delphi 7 Enterprise
 
#2

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

  Alt 26. Jun 2005, 23:30
Zitat von Tau:
habe ein kleines anschauungs- Beispiel angehängt.

Ist aber leider 1,6MB groß wegen der Demo Daten.
ähm, ich glaub das hast du vergessen
André
  Mit Zitat antworten Zitat
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#3

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

  Alt 27. Jun 2005, 00:14
ups habe das Demo noch etwas umgebaut ( 16 KB )

Die Demo Daten kann man jetzt selbst anlegen.

Sorry

schöne Grüsse
Tau
Angehängte Dateien
Dateityp: zip devexpressgrid_speed_437.zip (13,6 KB, 23x aufgerufen)
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

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

  Alt 27. Jun 2005, 02: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
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#5

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

  Alt 27. Jun 2005, 23:07
Hallo Jens

Danke für die Tipps mit dem BeginFullUpdate und Gridmode.

Das sind schon Massive unterschiede in der Zeit.
Habe einige Tests durchgeführt mit erstaunlichen Ergebnissen.

Hat es einen Bestimmten Grund warum du lieber das
Zitat:
DSQ2.DataSet := nil
anstatt
Zitat:
Q02.Disablecontrols
verwendest.

Du hast Recht wenn du meinst das der User nicht alle Daten auf einmal braucht.

Nur habe ich bis heute noch keinen Lösungsansatz für das Problem gefunden.

Bei mir ist das cxGrid fast zu 90% nur für die Darstellung
der Daten zuständig ohne irgendwelche Features wie ( ComboBox, DateEdit usw. ).

Bin mir gerade am überlegen wie ich die Sortierung über SQL Lösen könnte ( ORDER BY Feld ASC oder DESC )

hättest du vielleicht einige Tipps?

oder gibt es noch andere Möglichkeiten um das Grid ein bisschen schneller zu machen.

nochmals Danke für die Tipps

schöne Grüsse
Tau
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#6

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

  Alt 28. Jun 2005, 01:31
Zitat:
Hat es einen Bestimmten Grund warum du lieber das
DSQ2.DataSet := nil
anstatt
Q02.Disablecontrols
verwendest.
Disablecontrols durchläuft alle, an die Datenquelle angebundenen Komponenten, deakiviert diese und unterdrückt das Neuzeichnen beim Datensatzwechsel.

DSQ2.DataSet := nil ist imho etwas schneller weil die Datasource komplett von der Datenquelle getrennt wird. Besonders wenn man viele datensensitive Controls verwendet.


Zitat:
Bin mir gerade am überlegen wie ich die Sortierung über SQL Lösen könnte ( ORDER BY Feld ASC oder DESC )
Das geht auch recht leicht.
baue den SQL Code der Query Q02 doch einfach Dynamisch zusammen. Am Besten auf einer Function.

vereinfachtes Beispiel:

Delphi-Quellcode:
function TForm1.LoadData(SortParam:TSortParam; SortedFieldName, WHERE :String):Boolean;
  var SQL,SortFlag:String;
begin
  // SortParam z.B. als SET (sfUnsorted, sfAscending, sfDescending)

  result :=false;
  
  SortFlag :='';
  SQL:='';
    
  if (SortParam = sfAscending) AND (SortedFieldname<>'') then
    SortFlag:='ORDER BY '+SortedFieldName;

  if (SortParam = sfDescending) AND (SortedFieldname<>'') then
    SortFlag:='ORDER BY '+SortedFieldName+' DESC';

  SQL := 'SELECT * FROM TABLE1 '+WHERE+' '+SortParam;
  
  Query.close;
  Query.sql.clear;
  Query.sql.text:=SQL;
  
  try
    Query.open;
    Result:=Query.active;
  except
    on e:Exception do
    begin
      Showmessage(e.message);
      result:=false;
    end;
  end;

end;
Jetzt kannst du z.B. im onHeaderClick, über Comboboxen o.Ä. die Sortierung per SQL ändern.
z.B.
Delphi-Quellcode:
if LoadData(sfDescending,'ID', 'WHERE Name = ''Müller'' ') then
   ShowMessage('Fertig') else
   ShowMessage('Das hat leider nicht geklappt.');
  Mit Zitat antworten Zitat
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#7

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

  Alt 28. Jun 2005, 02:07
Hallo Jens

Danke für die ausführliche Erklärungen.

der Lösungsansatz ist ausbaufähig und
hat mich auf ein bar Ideen gebracht.

Die werde ich aber erst im Laufe des Tages umsetzen.

jetzt ist es zeit zum schlafen zu gehen DA N K E.

schöne Grüsse
Tau
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#8

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

  Alt 29. Jun 2005, 23:53
Hallo Jens

die Sortierung funktioniert Einwand frei.

habe es auf meine Bedürfnisse zugeschnitten da ich nur den SQL String brauche.
Falls Interesse besteht poste ich gerne die Lösung.

Zitat:
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.
Bin ganz deiner Meinung das die Datenmenge nicht überschaubar ist.

Deshalb habe ich versucht ein bar Anregungen zu finden leider ohne erfolg.
Hättest du vielleicht eine bar Anregungen wie so ein Lösungsansatz aussehen könnte.

schöne Grüsse
Tau
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

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

  Alt 30. Jun 2005, 00:28
1. Vermeide das Select * from blubb Schreibe die Felder statt des * da rein. Das bewirkt alleine schon kleinere Wunder.

2. das WHERE in einem Select wirkt ähnlich !

3. schmeiße Access weg.
Gruß
Hansa
  Mit Zitat antworten Zitat
Tau

Registriert seit: 17. Mär 2003
Ort: Bludenz
221 Beiträge
 
Delphi 7 Enterprise
 
#10

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

  Alt 30. Jun 2005, 00:41
Hallo Hansa

Danke für die Tipps

Zitat:
3. schmeiße Access weg.
Access verwende ich nur für Demobeispiele oder
um schnell etwas ausprobieren zu können.

schöne Grüsse
Tau
http://www.quad-offroad.com
wer kämpft kann verlieren aber wer nicht kämpft hat verloren
( Delphi 7 )
  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 10:35 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