Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Geschwindigkeit beim auslesen verbessern (https://www.delphipraxis.net/39942-geschwindigkeit-beim-auslesen-verbessern.html)

Sharky 9. Feb 2005 12:11

Re: Geschwindigkeit beim auslesen verbessern
 
Eventuell würde es auch einiges bringen für jede Zeile und Spalte des SG vor dem füllen ein BeginUpDate zu machen und nach dem Füllen ein EndUpdate:

Delphi-Quellcode:
procedure SGBeginUpdate (sg : TStringGrid);
var
  ndx : Integer;
begin
  for ndx := 0 to sg.RowCount-1 do
  begin
    sg.Rows[ndx].BeginUpdate;
  end;
  for ndx := 0 to sg.ColCount -1 do
  begin
    sg.Cols[ndx].BeginUpdate;
  end;
end;

procedure SGEndUpdate (sg : TStringGrid);
var
  ndx : Integer;
begin
  for ndx := 0 to sg.RowCount-1 do
  begin
    sg.Rows[ndx].EndUpdate;
  end;
  for ndx := 0 to sg.ColCount -1 do
  begin
    sg.Cols[ndx].EndUpdate;
  end;
end;


.
.
    grd_asset.Rows:= DM.ZQ.RecordCounte + 1; // Zeilenanzahl
    while not DM.ZQ.Eof do
    begin
        c:=c+1;

        s:= DM.ZQ.Fieldbyname('DATA').asString;
        templist.DelimitedText:=s;
        if c = 1 then
        begin
          grd_asset.Cols:=templist.Count; // Spaltenanzahl
          SGBeginUpDate (grd_asset); // BeginUpdate für das SG
        end;
        for i:=1 to templist.Count do
          grd_asset.Cell[i,c]:=templist.Strings[i-1];
//      end;
    DM.ZQ.Next;
    end;
    SGEndUpDate (grd_asset); // EndUpdate für das SG
.
.
Vorher müssen natürlich die Spalten und Zeilenanzahlen bekannt sein.

Grumble 9. Feb 2005 12:14

Re: Geschwindigkeit beim auslesen verbessern
 
verzeih meine unwissenheit, aber wozu diese update?

btw: recordcount war ne gute idee, bin mit der performance jetzt zufrieden :)

Sharky 9. Feb 2005 12:20

Re: Geschwindigkeit beim auslesen verbessern
 
Zitat:

Zitat von Grumble
verzeih meine unwissenheit, aber wozu diese update?...

Was gibt es da zu verzeihen?

Wenn Du eine visuele Komponente (StringGrit, ListBox, ListView usw) mit Daten füllst wird sie bei jedem neuen Eintrag auch neu gezeichnet. Durch das BeginUpdate wird dieses verhindert. Das bedeutet während dem füllen wird das Grid nicht neu gezeichnet. Erst nach dem EndUpdate wird dieses gemacht. Dies kann auch einige Sekunden einsparen.

shmia 9. Feb 2005 12:21

Re: Geschwindigkeit beim auslesen verbessern
 
Kleine Optimierungen: :wink:
Delphi-Quellcode:
  c:=0;
  dataexist:=false;
// DM.ZQ.SQL.Clear; <== ist überflüssig wenn Zuweisung auf SQL.Text folgt
  DM.ZQ.SQL.Text := 'SELECT * FROM ASSET_DATA WHERE ASSET_id = ' + IntToStr (caid);
  DM.ZQ.Open;
//  DM.ZQ.First; <== ist überflüssig, da nach Open die Datenmenge immer auf dem 1. Record steht
  if DM.ZQ.IsEmpty then  // <== Prüfung mit IsEmpty ist am "saubersten"
     Exit;  // keine Daten gefunden


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:27 Uhr.
Seite 2 von 2     12   

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