Ich habe eine lokale Datenbank auf meiner SSD. Ich habe eine Tabelle mit drei Spalten:
Im Speicher habe ich jetzt 50.000 Einträge die ich dort speichern möchte. Meine Herren, das dauert lange. Mit AqTime-Profiler dauert das mit 20 Sekunden ca. vier mal so lange wie "in Echt", aber ich kann wenigstens sehen, was so viel Zeit frisst:
Code:
1x TGünthersDatabase.insertData(): 20 Sek
> 50.000x TFDDataSet.Post: 15 Sek
> > TFDTable.InternalPost: 10 Sek
> > TFDTable.InternalLast: 5 Sek
> 1x TFDDataSet.EndBatch: 3 Sek
Mein Code sieht so aus:
Delphi-Quellcode:
var
einDatum: TDatum;
begin
meineDatenbank.BeginBatch(False);
try
for einDatum in meineDatenAusDemSpeicher do begin
meineDatenbank.Append();
meineDatenbank.FieldByName('a').AsInteger := irgendeinFKey;
meineDatenbank.FieldByName('b').AsFloat := einDatum.Float1;
meineDatenbank.FieldByName('c').AsFloat := einDatum.Float2;
meineDatenbank.Post();
end;
finally
meineDatenbank.EndBatch();
end;
end;
Vor Benutzung von Begin/EndBatch war es noch etwas schlimmer, aber viel hat es auch nicht gebracht.
Was können Profis mir noch für Tipps geben? Das kann doch so nicht richtig sein. Ich lese etwas von "Array DML" (was der Advantage Server aber garantiert nicht unterstützt) und "CachedUpdates". Bin ich hier auf dem richtigen Weg oder wird das auch nichts bringen?