Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.155 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

FireDAC: Viele Records einfügen dauert ziemlich lange

  Alt 10. Dez 2015, 10:21
Datenbank: Advantage Local Server • Version: 11 • Zugriff über: FireDAC
Ich habe eine lokale Datenbank auf meiner SSD. Ich habe eine Tabelle mit drei Spalten:
Integer(FKEY)FloatFloat

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?

Geändert von Der schöne Günther (10. Dez 2015 um 10:25 Uhr)
  Mit Zitat antworten Zitat