Das MARS Projekt nutzt ebenfalls Elemente von mormot. Um meine Installation nicht zu beschädigen werde ich die Tage ein SnapShot machen, mormot installieren und den Test durchführen. Es dauert noch etwas bis ich dazu kommen aber du bekommst den Benchmark.
Danke für den Test. Meine Lösung von gestern Abend war etwas verspielt. Ich dachte, es ist eine selten genutzte Funktion und damit eine gute Gelegenheit etwas Ausgefallenes aus der mORMot Bibliothek vorzustellen. Die schnellen TextWriter Klassen von mORMot hatte ich im Forum schon vorgestellt, sind hier aber die richtige Wahl. Die Klasse
TJsonWriter aus der
Unit mormot.core.json ist in meinen Tests größer Faktor 400 schneller als die Delphi Klasse
TJsonTextWriter. Für 500K Datensätze ist die Laufzeit kleiner 100 Millisekunden und damit ca. Faktor 4 schneller als mein erster Vorschlag Variant-Array. Das wird deinem Vorhaben einen zusätzlichen Push geben. Schreibe es so:
Delphi-Quellcode:
qrPersonen.First;
var run: Integer := 1;
var w: TJsonWriter := TJsonWriter.CreateOwnedFileStream(MakePath([Executable.ProgramFilePath, 'data.json']));
try
w.Add('[');
while not qrPersonen.EoF do
begin
w.Add('[');
w.AddCsvConst([run,
qrPersonen.Fields[idxPersonID].AsLargeInt;
qrPersonen.Fields[idxName].AsString;
qrPersonen.Fields[idxTitel].AsString;
qrPersonen.Fields[idxVorname].AsString;
qrPersonen.Fields[idxGeburtsdatum].AsString;
qrPersonen.Fields[idxPersonalNr].AsString;
qrPersonen.Fields[idxEintrittsjahr].AsInteger;
qrPersonen.Fields[idxFachNr].AsLargeInt;
qrPersonen.Fields[idxFach].AsString
]);
w.Add(']');
w.AddComma;
end;
w.CancelLastComma;
w.Add(']');
finally
w.FlushFinal;
w.Free;
end;
Bis bald...
Thomas