Hoje eu estava trabalhando em um job para importação da base de dados de ceps e me deparei com o problema de cada .insert() ou .doIsert() o kernel do AX faz uma requisição ao banco de dados, o que torna o processo muito lento.

Conversando com o meu ‘cumpadi’ Fraga, ele me perguntou porque eu não testava um tal de RecordInsertList, que talvez o tempo baixasse!

Pois bem, fiz um teste lendo um access e inserindo 10.000 registros em uma tabela do ax, vejam vocês mesmos a diferença:

Usando RecordInsertList:
Início: 05:10:12 pm
Fim: 05:11:45 pm
Tempo total: 1 minuto e 37 segundos
Inseridos 13.967 registros.

Método convenciona (.insert()):
Início: 16:50:53
Fim: 16:53:01
Tempo total: 2 minutos e 8 segundos
Inseridos 13.967 registros.

Mais estatisticas:
Início: 05:43:47 pm
Fim: 06:50:22 pm
Tempo total: 1 hora 6 minutos e 25 segundos
Inseridos 633.464 registros.

Código:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
  RecordInsertList recordList; 
  CustTable custtable;
  ;  
  recordList= new RecordInsertList(tableNum(custtable));
  while select .......
  {
    custTable.nome = ".....";
    custTable.address = ".....";
    recordList.add(custTable);
  }  
  recordList.insertDatabase();
}

Créditos:
Ricardo Pichler
Rodrigo Fraga