Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado (editado)

Consumo de memória só aumenta utilizando Open SSL(Certificado Digital.pfx) 

Fonte: ACBrDFeOpenSSL.pas
Procedure: TDFeOpenSSL.CarregarCertificado
Comando: DadosPFX := ReadStrFromStream(FS, FS.Size);

O comando ReadStrFromStream é responsável por aumenta o consumo de memória toda vez que um arquivo XML é assinado e esse consumo
mesmo após destruir o componente ACBreSocial não é subtraído. 

Editado por Alisson Souza Pereira
  • Consultores
Postado
2 horas atrás, Alisson Souza Pereira disse:

Mudei para a assinatura com o certificado instalado na máquina, com isso contorno a situação, porém o problema ainda existe. 
Não sei exatamente como corrigir. 

Como você detectou que o vazamento está aí? Está utilizando o FastMM? Poderia apresentar um log? Precisamos de uma aplicação que demonstre o problema. Pode montá-la?

Inspecionando o código por cima não vi nada que possa ocasionar um vazamento de memória como você afirma haver. Veja bem:

Em 21/05/2019 at 18:48, Alisson Souza Pereira disse:

O comando ReadStrFromStream é responsável por aumenta o consumo de memória toda vez que um arquivo XML é assinado e esse consumo
mesmo após destruir o componente ACBreSocial não é subtraído.  

Se você ler o código ao redor do método ReadStrFromStream, notará que esse método não cria nenhum objeto, os objetos passados a ele por parâmetros não tem incrementação de RefCount,  DadosPFX é AnsiString, o método TDFeSSL.SetDadosPFX não parece causar nenhum vazamento.

 

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado

Boa tarde, @EMBarbosa minha aplicação depois de algum tempo rodando acabava travando devido o consumo elevado de memória,
Cada vez que o XML era assinado aumentava de 0,1 a 1 mega, se a linha for comentada a memoria para de sobrecarregar(comentar a linha não é a solução é só o teste que fiz)

Sobre o FastMM sempre utilizo em meu desenvolvimento, segue as informações que tenho. 

Quando é executado o comando ReadStrFromStream ocorre memory Leak
image.thumb.png.5366e9c3eeda08196cbe8ebb3891b62c.png

An unexpected memory leak has occurred. The unexpected small block leaks are:
13 - 20 bytes: TLeitor x 1, Unknown x 1
69 - 76 bytes: TStringList x 1
117 - 124 bytes: Unknown x 1

 

Se a linha for comentada não há vazamento de memória, ocorre o exception e cancela a assinatura do XML. 
image.png.bbc1203019603ec8e073853a0595651b.png
 


Não acredito que o problema de memória seja por causa de configuração, mas segue a configuração que estou utilizando. 
SSLLib       := libOpenSSL;
SSLHttpLib   := httpWinHttp;

 

  • Consultores
Postado
40 minutos atrás, Alisson Souza Pereira disse:

minha aplicação depois de algum tempo rodando acabava travando devido o consumo elevado de memória,
Cada vez que o XML era assinado aumentava de 0,1 a 1 mega, se a linha for comentada a memoria para de sobrecarregar(comentar a linha não é a solução é só o teste que fiz)

Puxa isso é frustrante. Um vazamento de 0,1 a 1 mega é muita coisa pra vazamento de memória numa função usada tantas vezes. Mas dá pra gente resolver. Vamos lá...

38 minutos atrás, Alisson Souza Pereira disse:

Sobre o FastMM sempre utilizo em meu desenvolvimento, segue as informações que tenho

Que ótimo! Isso ajuda muito para que juntos, analisemos o problema! Já li aqui e identifiquei um possível problema.

Por favor veja essa parte que você escreveu:

42 minutos atrás, Alisson Souza Pereira disse:

Se a linha for comentada não há vazamento de memória, ocorre o exception e cancela a assinatura do XML. 
image.png.bbc1203019603ec8e073853a0595651b.png

Poderia alterar a linha para a seguinte?

DadosPFX := 'Texto apenas para ter algum valor.';

Daí repita o teste para ver se acontece o mesmo vazamento de memória.

A propósito, qual versão do seu Delphi?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Postado

Atualmente estou utilizando 10.3 Rio, porém noto que este vazamento ocorre desde quando implantei o eSocial em 2018 e naquela época utilizava 10. 1 Berlin e posterior mente 10.2 Tokyo.
 

Ao invés de comentar o código, passar qualquer valor para o DadosPFX conforme solicitado. 

DadosPFX := 'Texto apenas para ter algum valor.';

Não há memory leak, e só dá erro na segunda verificação LerPFXInfo 

    if EstaVazio(DadosPFX) then
      raise EACBrDFeException.Create('Erro ao Carregar Certificado');

    if not LerPFXInfo(DadosPFX) then
      raise EACBrDFeException.Create('Erro ao ler informações do Certificado.'+sLineBreak+
                                     'Provavelmente a senha está errada' );

 

  • Consultores
Postado
Em 24/05/2019 at 16:37, Alisson Souza Pereira disse:

Não há memory leak, e dá erro na segunda verificação LerPFXInfo  

hmmm então o teste que eu passei não foi suficiente. Poderia manter a alteração que eu pedi e comentar essa verificação?

A intenção é que não seja levantado nenhuma exception para que possamos avaliar se há ou não o vazamento.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
  • Este tópico foi criado há 2016 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.