array of record füllen
Für eine aktuelle Anwendung von mir muss ich ein array of records mit Datensätzen aus einer SQL Datenbank befüllen. Funktionerit soweit ganz gut, ist nur SEHR langsam...
Wie schon erwähnt klappt das ganze eigentlich schon ganz gut. Allerdings geht die Performace ziemlich schnell in die Knie.
Sobald ich versuche ca. 100000 Datensätze einzulesen dauert das ganze, je nach Laune des Computers und laufenden Programmen, zwischen 4 und 8 Minuten!!!
Da das ganze beim Programmstart ausgeführt werden soll ist das untragbar, es sollte maximal 10-20 Sekunden dauern....
Hier einmal ein kleiner Beispielcode (Das Record ist eigentlich wesentlich umfangreicher):
Vielleicht habt ihr ja eine Idee wie man das ganze schneller machen kann.
Gruß, Gushiken
Wie schon erwähnt klappt das ganze eigentlich schon ganz gut. Allerdings geht die Performace ziemlich schnell in die Knie.
Sobald ich versuche ca. 100000 Datensätze einzulesen dauert das ganze, je nach Laune des Computers und laufenden Programmen, zwischen 4 und 8 Minuten!!!
Da das ganze beim Programmstart ausgeführt werden soll ist das untragbar, es sollte maximal 10-20 Sekunden dauern....
Hier einmal ein kleiner Beispielcode (Das Record ist eigentlich wesentlich umfangreicher):
// Record und Array of Record
TPerson = packed record
nachname:string[50];
end;
TPersonArray = array of TPerson;
// Funktion
with query do
begin
with sql do
begin
clear;
add('<SELECT Anweisung>');
end;
open;
first;
len:=RecordCount;
setLength(personenArray,len);
len:=0;
while len<RecordCount do
begin
with personenArray[len] do
begin
nachname:=Fields.Fields.AsString;
end;
next;
len:= len+1;
end;
end;
Vielleicht habt ihr ja eine Idee wie man das ganze schneller machen kann.
Gruß, Gushiken
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 102788
Url: https://administrator.de/contentid/102788
Ausgedruckt am: 22.11.2024 um 14:11 Uhr
1 Kommentar
Hallo,
gibt es einen Grund warum die WHILE Schleife nicht mit einem "while not query.eof" gemacht wird ?
Man könnte zumindest len := len + 1 einsparen, und die recordcount Abfrage soll auch nicht die schnellste sein..
Falls parallel dazu noch die Daten in einem Grid o.ä. angezeigt werden, könnte man mit DisableControls vielleicht noch was an Geschwindigkeit rausholen.
vg
gibt es einen Grund warum die WHILE Schleife nicht mit einem "while not query.eof" gemacht wird ?
Man könnte zumindest len := len + 1 einsparen, und die recordcount Abfrage soll auch nicht die schnellste sein..
Falls parallel dazu noch die Daten in einem Grid o.ä. angezeigt werden, könnte man mit DisableControls vielleicht noch was an Geschwindigkeit rausholen.
vg