Ir para conteúdo
  • Cadastre-se

dev botao

Possivel solução em memory leak em ACBrMDFeWebServices


Ver Solução Respondido por Antonio Carlos L,

Recommended Posts

Revision 33422.

Estava dando o seguinte memoryleak ao efetuar consulta MDFe.
 

erro_consulta_mdfe.png.31b0a7c897e76c4228f64884faa56408.png

 

Achei a classe TProcInfraSA na unit ACBrMDFeWebServices

A classe é criada no metodo TMDFeConsulta.Clear e esta sendo destruída no destrutor;

Adicionei essa verificação antes de criar 

if Assigned(FprocInfraSA) then FprocInfraSA.Free;

  FprocInfraSA := TProcInfraSA.Create;

e o leak desapareceu.

Para vossas considerações.
 

Link para o comentário
Compartilhar em outros sites

  • Moderadores

No caso o correto seria destruir ao fim do uso ?  e não ao criar ele ?
fontes estão 100% atualizados todos pois tenho validação de vazamento e uso o MDFe e não ocorre usando o sistema

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
 

 

Link para o comentário
Compartilhar em outros sites

  • Solution

OI Juliomar.

Levando em consideração sua resposta, olhei a chamada da consulta e esta identica ao exemplo do MDFe em procedure TfrmACBrMDFe.btnConsultarClick(Sender: TObject);

Veja no código da Revision 33422 na unit ACBrMDFeWebServices .

Existe outras duas variaveis FprotMDFe e FprocEventoMDFe, coloquei o bloco de código abaixo, que também são destruídas se existirem antes de serem criadas.

Segui apenas a mesma logica em relação a FprocInfraSA.

O fato é que se eu remover essa linha e fizer varias consultas acontecem vários MemoryLeak e acrescentando essa linha não ocorre.

erro_consulta_mdfe2.png.ff759a9892c457a347526cc5c0525739.png

 

procedure TMDFeConsulta.Clear;
begin
  inherited Clear;

  ....

  if Assigned(FPConfiguracoesMDFe) then
  begin
    FtpAmb := FPConfiguracoesMDFe.WebServices.Ambiente;
    FcUF := FPConfiguracoesMDFe.WebServices.UFCodigo;
  end;

  if Assigned(FprotMDFe) then
    FprotMDFe.Free;

  if Assigned(FprocEventoMDFe) then
    FprocEventoMDFe.Free;

  if Assigned(FprocInfraSA) then  FprocInfraSA.Free;  <<< adicionado
   

  FprotMDFe       := TProcMDFe.Create;
  FprocEventoMDFe := TRetEventoMDFeCollection.Create;

  FprocInfraSA := TProcInfraSA.Create;
end;

Link para o comentário
Compartilhar em outros sites

  • Consultores

Bom dia Antonio,

Muito obrigado pela colaboração, já inclui na minha lista de tarefas para analise. TK-5379

  • Curtir 1
Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / e-mail: [email protected] / Fone: (16) 9-9701-5030 / Araraquara-SP

Araraquara - A era dos Trólebus

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • 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.