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
4 Responses
Leandro
02|Oct|2008 1Ricardo e Rodrigo,
Desculoe a pergunta, mas é que não desenvolvo há muito tempo.
No código acima vc inseriu os dados do RecorList na CustTable?
E com que dados vc populou o RecordList? Que parte do código vc popula o RecordList?
Brno Azevedo
05|Oct|2008 2na verdade ele só mostra como popular o RecordList, não importando o fato de ser o mesmo CustTable, o qual é um mero exemplo.
Algo “mais” detalhado seria:
{
RecordInsertList recordList;
CustTable custtable;
;
recordList= new RecordInsertList(tableNum(custtable));
while
{
custtable = CustTable::Find( “findKey”, true); // Pesquisa o registro usando a chave da tabela desejada, e setando para ForUpdate.
custtable.CAMPO1 = ‘DADO’;
custtable.CAMPO2 = ‘Outra informação desejada’;
recordList.add(custtable);
}
recordList.insertDatabase();
}
Ricardo Pichler
05|Oct|2008 3é, o exemplo ta errado mesmo, estão faltando algumas coisas, mas o seu find dentro do while é completamente desnecessário. No seu caso seria um Update, mas eu não vi se update funciona desse jeito, a forma correta foi atualizada no site agora.
Abraço e obrigado.
nympho sexe toy
25|Jun|2014 4Magnifique article : comme d’habitude
Leave a reply
Search
Tags / Categorias
RSS
Arquivo
Blogroll