![]() |
Datenbank: SQLite • Version: ? • Zugriff über: FireDac
Bild aus SQLte laden
Hallo, ich habe eine kleine Anwendung Programmiert
wo ich eine SQLite Datenbank erstellt habe. In dieser Datenbank kann ich max 3 Bilder (jpg) mit max 250kb speichern, mehr als 250 kb lasse ich nicht zu. Wenn ich einen Datensatz aufrufe dauert es sehr lange bis die 3 Bilder anget´zeigt werden, ist das normal ? min 3 sec dauert es. Hier mal mein Code, jpg wird zum speichern gebraucht
Delphi-Quellcode:
var jpg : TJPEGImage;
... jpg:=TJPEGImage.Create; m:=TMemoryStream.Create; try TBlobField(Datasource2.DataSet.FieldByName('BILD1')).SaveToStream(m); m.Position:= 0; if m.Size > 0 then begin jpg.LoadFromStream(m); Image1.Picture.Assign(jpg); end else begin Image1.Picture := nil; end; finally FreeAndNil(m); FreeAndNil(jpg); end; mfg |
AW: Bild aus SQLte laden
Kommentiere bitte mal das
Delphi-Quellcode:
aus.
Image1.Picture.Assign(jpg);
Bleibt es dann langsam, liegt's an der Datenbank. Ändert sich die Laufzeit deutlich nach unten, liegt's an der Anzeige des Bildes. Je nach Ergebnis kann man dann weiterschauen, an welchem Programmteil was geändert werden muss. Erfahrungsgemäß frisst die Anzeige von Bildern oft die meiste Rechenzeit. |
AW: Bild aus SQLte laden
Image1.Picture.Assign(jpg);
ist ein ganz kleines vorschaubild. aber ok ich mache das mal mfg |
AW: Bild aus SQLte laden
Leider bringt Delphi mittlerweile keinen Profiler mehr mit, aber du kannst doch im Debugger einfach an dieser Stelle im Code anhalten und mit F8 Schritt für Schritt jede Zeile durchgehen. Sollte es hier wirklich etwas geben das derart lange dauert siehst du das direkt.
|
AW: Bild aus SQLte laden
Stimmz auch wieder und sit vermutlich deutlich effektiver als "meine Auskommentiererei".
Und als Ergebnis die "lahme" Zeile geneu benannt werden ;-) |
AW: Bild aus SQLte laden
Ich habe mal bei allen 3 Bilder
das raus genommen, //Image1.Picture.Assign(jpg); Das Programm war sofort da, brauche nicht mehr zu wachten. Tja ich brauche aber die vorschaubilder mfg |
AW: Bild aus SQLte laden
Wir wissen aber nu schonmal, dass das Problem nicht (wie ursprünglich vermutet) datenbankseitig zu suchen ist.
|
AW: Bild aus SQLte laden
Tja was kann man da machen ? ich brauche die kleinen Vorschaubilder
mfg |
AW: Bild aus SQLte laden
Ehrlich gesagt: Bisher keine Ahnung :-(
Schonmal dem Tip von Der schöne Günther gefolgt und per Debugger und Einzelschritt durch die Routine gegangen? Welche der Zeilen "verbrät" da die meiste Zeit? |
AW: Bild aus SQLte laden
ich habe das jetzt mal gemacht
mit Taste F8 debug Hier läuft er super durch
Delphi-Quellcode:
jpg:=TJPEGImage.Create;
m:=TMemoryStream.Create; try TBlobField(Datasource2.DataSet.FieldByName('BILD1')).SaveToStream(m); m.Position:= 0; if m.Size > 0 then begin jpg.LoadFromStream(m); Image1.Picture.Assign(jpg); end else begin Image1.Picture := nil; end; finally FreeAndNil(m); FreeAndNil(jpg); end; Und hier läuft er sich zu tote Zwischen repeat und until, ich denke beim Form Aufbau
Delphi-Quellcode:
unit Vcl.Forms;
repeat try HandleMessage; except HandleException(Self); end; until Terminated; mfg |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:21 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