Jump to content

Delphi chamada_delphi.png acbr.png

C6 chamada_c6.png botao.png

Consumo de memória só aumenta


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

Recommended Posts

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. 

Edited by Alisson Souza Pereira
Link to comment
Share on other sites

  • Consultores

Certo.

tem algum possível código para podermos aplicar e testar?

Consultor SAC ACBr Juliomar Marchetti
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Black-02.png
Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

Link to comment
Share on other sites

  • Consultores
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.
Link to comment
Share on other sites

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;

 

Link to comment
Share on other sites

  • Consultores
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.
Link to comment
Share on other sites

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' );

 

Link to comment
Share on other sites

  • Consultores
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.
Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.