Jump to content

Compre o Delphi
Com até 30% de desconto
e parcelado em até 12x sem juros

Saiba Mais

Balança SM100 performance surpreendente

Tecnologia Japonesa   Teclado e Visor resistentes a água
Consumo inteligente de etiquetas   Baixo custo de manutenção
Comunicação Ethernet e WIFI independentes

Saiba mais

Impressora de Etiquetas ELGIN - L42 PRO

Protocolos PPLA, PPLB, ZPL, EPL (automático)
Porta USB padrão Opcionais: Ethernet, Serial, Paralela
Sensor de Etiquetas Móvel Garantia de 18 meses

Saiba mais

Alisson Souza Pereira

Consumo de memória só aumenta

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

Share this post


Link to post
Share on other sites
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
Ajude o Projeto ACBr crescer - Assine o SAC

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.

Share this post


Link to post
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;

 

Share this post


Link to post
Share on other sites
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
Ajude o Projeto ACBr crescer - Assine o SAC

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.

Share this post


Link to post
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' );

 

Share this post


Link to post
Share on other sites
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
Ajude o Projeto ACBr crescer - Assine o SAC

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.

Share this post


Link to post
Share on other sites

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...