So, nochmal eine Zusammenfassung:
Delphi-Quellcode:
var
Dataset: TpFIBDataset;
begin
Dataset.First;
while NOT Dataset.Eof do begin
for i := 0 to 9 do begin
Dataset.Fields[i].AsString;
end;
Dataset.Next;
end;
end;
Das ganze ist einfach nur eine Routine, um die Geschwindigkeit des Auslesens von 10 Feldern zu testen, weswegen der resultierende String auch zu nichts zugewiesen wird. Am Dataset hängen keine Sources, Komponenten etc.!
Der
Query fragt aus der Datenbank (Adressen) alle Felder der Tabelle ab. In der Tabelle befinden sich ca. 3500 Einträge.
Performance
TpFIBDataset: ~35000 ms
TpFIBQuery: 4600 ms
JvUIBQuery: 600 ms
Also signifikante Unterschiede.
Auf die JvUIB hab ich zum Laden verzichtet, da sich die JvUIBTransaction
imho nicht mit der TpFIBTransaction synchronieren lässt.
Workaround für mich um passable Geschwindigkeiten zu erreichen:
1) Begrenzen der Abfrage auf 500 Datensätze
2) Nutzen des pFIBQuery aus dem pFibDataset
Dataset.QSelect.Fields[i].AsString
Vielen Dank an alle Mitdiskutierenden.
BTW: Erstaunlich, dass eine
OS-Komponente (JvUIB) schneller ist, als eine kommerzielle (FIBPlus). Trotzdem sind mir die FIBs bequemer