![]() |
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:
Vorher müssen natürlich die Spalten und Zeilenanzahlen bekannt sein.
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 . . |
Re: Geschwindigkeit beim auslesen verbessern
verzeih meine unwissenheit, aber wozu diese update?
btw: recordcount war ne gute idee, bin mit der performance jetzt zufrieden :) |
Re: Geschwindigkeit beim auslesen verbessern
Zitat:
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. |
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 04:27 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