Ir para conteúdo
  • Cadastre-se

Provável memory leak ao ler arquivos XML com TACBrCTe e a LibXml2


Ver Solução Respondido por BigWings,
  • Este tópico foi criado há 287 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado

Estou enfrentando um problema que parece ser um vazamento de memória.
Tenho vários arquivos XML de CTe para importar pro sistema, então dentro de um loop eu crio um TACBrCTe, carrego o arquivo via LoadFromFile(caminhoarquivo, False), leio os dados necessários e depois destruo o TACBrCTe via Free.
Isso é feito a cada 5 segundos, num serviço de monitoramento de arquivos de uma pasta.
Recentemente atualizei a biblioteca e agora passou a usar a nova versão com a diretoriva USE_ACBr_XMLDOCUMENT.
A cada ciclo de execução a memória RAM consumida pelo processo vai aumentando, até que após algum tempo causa o erro abaixo:

Imagem

Já tentei criar o TACBrCTe fora do loop e executar Conhecimentos.Clear antes de carregar cada arquivo, mas o resultado é o mesmo.
Acabei de baixar as DLLs da LibXml2 daqui https://svn.code.sf.net/p/acbr/code/trunk2/DLLs/LibXml2/x86/ e também não resolveu.

Se quiserem reproduzir o problema, criei uma pequena aplicação pra isso (imagem da tela abaixo). Está em anexo.

Imagem

Basta informar uma pasta com vários arquivos XML, clicar no botão Processar várias vezes e monitorar o consumo de RAM.

No meu caso os arquivos tem extensão .txt, então se forem utilizar .xml, terão que alterar a linha abaixo do clique no botão Processar.

Arquivos := TDirectory.GetFiles(edtPastaXml.Text, 'XMLCTE_*.*');

ACBrCTe.rar

  • Curtir 1
  • Este tópico foi criado há 287 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.