Microsoft Dynamics AX bietet eine performante Möglichkeit viele
Datensätze einzufügen. Hierzu wird die Klasse RecordInsertList
verwendet.
RecordInsertList recordList;
CustTable custtable;
;
recordList= new RecordInsertList(tableNum(custtable));
while
{
//TODO: Datensätze erzeugen ohne insert aufzurufen
recordList.add(custtable); //Datensatz der Liste übergeben
}
recordList.insertDatabase();// Datensätze einfügen
Hierbei werden die Datensätze nicht mehr sofort in die Datenbank
geschrieben werden, sondern im RecordListInsert Buffer lokal
zwischengespeichert. Die dort enthaltenen Datensätze werden spätestens
beim Aufruf der Methode insertDatabase() -das Einfügen der Datensätze
wird hier vom Kernel gesteuert, der einen geeigeneten Zeitpunkt zum
Einfügen auswählt- in die Datenbank geschrieben.
Bei meinem Versuch auf einem VirtualPC habe ich eine Geschwindigkeitsvorteil von ca. 25% erzielt.
Im AXforum.info
(eines der größten Dynamics Foren) kann man noch einen Testjob finden,
der deutlich macht, was an Zeit eingespart werden kann, wenn mit
RecordInsertList gearbeitet wird.
Update
Bei der Instanzierung gibt es noch optionale Parameter wie
- Insert Methode der Tabelle überspringen [Default=false]
- Datenbanklog überspringen [Default=false]
- Alerts überspringen [Default=false]
- AOS Validierung überspringen [Default=false]
Ist bei der aktuellen Tabelle einer dieser Punkte (Insert Methode,
Datenbanklog...) vorhanden, müssen diese dann mittels der Parameter
übersprungen werden, sonst wird aus dem Bulk-Insert wieder ein
Single-Record-Insert!
Vielen Dank an SebDra für diese Informationen!