Delphi-PRAXiS
Seite 1 von 9  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Performance verbessern (https://www.delphipraxis.net/82215-performance-verbessern.html)

Luncustaf 8. Dez 2006 18:20

Datenbank: mysql • Version: 5.0 • Zugriff über: zeos

Performance verbessern
 
hi,

hab hier den code um für mein onlinekochbuch - die Anzahl der rezepte aus der datenbank zu lesen. zu beginn hab ich alles per zeos ausgelesen, nun bin ich soweit das ich die kategorie und die unterkategorie die sich nicht ändern lokal auf festplatte habe und nur noch die Anzahl der rezepte per zeos auslesen. ich habe mir dadurch eigentlich eine geschwindigkeitsverbesserung erhofft - hat aber leider nicht allzuviel gebracht, eigentlich gar nichts.

Delphi-Quellcode:
  i,a : integer;
  namen : TStringList;
  ini : TIniFile;
begin
  namen := TStringList.Create;
  ini := TIniFile.Create(extractfilepath(paramstr(0))+'unterkategorien.ini');
  databasel;
  sqlq.Active := False;
  sqlq.SQL.Clear;
  sqlq.SQL.Add('SELECT name FROM kategorie');
  sqlq.Active := True;
  sqlq.First;
  while not sqlq.Eof do
  begin
     namen.Add(sqlq.FieldByName('name').AsString);
     sqlq.Next;
  end;//sqlq.eof
  sqlq.Active := False;
  namen.SaveToFile(extractfilepath(paramstr(0))+'kategorie.txt');
  for i := 0 to namen.Count -1 do
  begin
     sqlqrez.Active := False;
     sqlqrez.SQL.Clear;
     sqlqrez.SQL.Add('SELECT Count(name) FROM rezepte WHERE kategorie="'+namen.Strings[i]+'"');
     sqlqrez.Active := True;
     with tv_rezept.Items do
     begin
       t := AddChild(nil,namen.Strings[i] + ' ('+sqlqrez.fieldbyname('Count(name)').AsString+')');
     end;
     for a := 0 to 8 do //ab hier geht denke ich die performance drauf
     begin
       if not (ini.ReadString(namen.Strings[i],'unter'+IntToStr(a),'') = '') then                              
       begin
         sqlqrez.Active := False;
         sqlqrez.SQL.Clear;
         sqlqrez.SQL.Add('SELECT Count(name) FROM rezepte WHERE unterkat="'+ini.ReadString(namen.Strings[i],'unter'+IntToStr(a),'')+'" AND kategorie="'+namen.Strings[i]+'"');
         sqlqrez.Active := True;
         tv_rezept.Items.AddChild(t,ini.ReadString(namen.Strings[i],'unter'+IntToStr(a),'')+ ' (' + sqlqrez.fieldbyname('Count(name)').AsString +')' );
         sqlqrez.Active := False;
       end;//if not ini....
     end;//for a
  end;//for i
die inifile sieht so aus

Delphi-Quellcode:
[Eier- & Mehlspeisen]
unter0=Crêpes
unter1=Deftiges & Delikates
unter2=Omelettes
unter3=Pfannkuchen
unter4=Sonstiges
[Auflauf & Co.]
unter0=Sonstiges
unter1=Gratins
unter2=Aufläufe
unter3=Soufflès
usw...
hmm ich weis nicht genau was ich noch daran verbessern könnte um die ganze sache zu beschleunigen so das man nicht ca ~20sek warten muss bis die anzahl aller rezepte ausgelesen und die TreeView aufgebaut ist.
hat evtl jemand einen ansatz?

mfg

jbg 8. Dez 2006 18:24

Re: Performance verbessern
 
Schonmal den Code mit
Delphi-Quellcode:
tv_rezept.Items.BeginUpdate
try
  ...
finally
  tv_rezept.Items.EndUpdate;
end;
optimiert?

Luncustaf 8. Dez 2006 18:28

Re: Performance verbessern
 
hi,

wo genau muss ich das einbauen? bzw was bringt/bewirkt es? :)

danke

jbg 8. Dez 2006 18:29

Re: Performance verbessern
 
Zitat:

Zitat von Luncustaf
wo genau muss ich das einbauen?

Alles ab "for i := 0 to namen.Count -1 do" muss dort hin, wo das "..." steht.

Zitat:

was bringt/bewirkt es? :)
Taste F1

Luncustaf 8. Dez 2006 18:33

Re: Performance verbessern
 
hmm ok,

hab ich eingebaut - bringt aber auch net wirklich was - also ich hab keine spürbare verbesserung gemerkt :(

jbg 8. Dez 2006 18:59

Re: Performance verbessern
 
Vielleicht dauern die SQL Abfragen einfach zu lange.

Luncustaf 8. Dez 2006 19:04

Re: Performance verbessern
 
hmm das hab ich mir auch schon gedacht - wüsste aber nicht wie ich die verbessern könnte :(

muss ich mir wohl anders helfen. falls evtl jemand nen vorschlag hat die SQL-Abfragen zu verbessern - bin für alles offen :)

danke dennoch für deine schnelle Hilfe

gruß

mkinzler 9. Dez 2006 11:04

Re: Performance verbessern
 
Ich würde keine lokale Speicherung verwenden, bringt imho keine Performancesteigerung, kompliziert die Sache nur.

Schon mal

SQL-Code:
SELECT Count(name) FROM rezepte WHERE kategorie in ( ...)
versucht?

Luncustaf 9. Dez 2006 12:29

Re: Performance verbessern
 
hi,

hab ich nun eingebaut - hmm kann nun nicht sagen ob es schneller geht oder nicht - die datenbank braucht trotzdem "lange" zum laden - ich habe esn un so gemacht das die db einmal am anfang des programms geladen wird.
wäre natürlich trotzdem super wenn es noch ein bisschen schneller gehen würde ;)

wer will kann es sich auch mal selber anschauen

www.la-honda.de/kochen.rar
www.la-honda.de/kochen_dll.rar


gruß

Bernhard Geyer 9. Dez 2006 18:59

Re: Performance verbessern
 
Wenn Du die beiden Abfragen als parametrisierte Abfragen auslegst und beim ersten mal preparste sollte einiges an Performancesteigerung drin sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 Uhr.
Seite 1 von 9  1 23     Letzte »    

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