Ir para conteúdo
  • Cadastre-se

dev botao

Possivel solução em memory leak em ACBrMDFeWebServices


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

Recommended Posts

Postado

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.
 

  • Solution
Postado

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;

  • Este tópico foi criado há 211 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

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.