Fórum FastMM é confiável ? #353527
12/02/2008
0
Há alguns dias descobri essa possibilidade: de encontrar vazamentos de memória através do FastMM com Delphi7.
Tive dificuldades em encontrar os tais vazamentos em aplicações em produção ...
Então comecei uma do zero para ver como seria ...
No form principal fui incluindo as funcionalidades, como controle centralizado de erros com envio de e-mail, controle de ociosidade, etc
Testando, um por um, saindo da aplicação a cada teste para ver se algum problema era apontado ...
Até que ao implementar o envio dos erros por e-mail, o erro ocorreu:
´Essa aplicação teve vazamentos de memória ...
21-28 bytes: TCriticalSection x 1 ´
(o mesmo erro que não consegui encontrar na aplicação pronta)
Achei que já havia achado o tal problema, visto que a última função que implementei fora ´ envio dos erros por e-mail´ ...
Comentei a função e para a minha surpresa o erro persistiu !
Reiniciei o Delphi ... despois a máquina ... e agora sempre ao sair do sistema o erro aparece !!
Será que esse erro existe mesmo !?
Obrigado.
Francisco.
Francisco.riva1
Curtir tópico
+ 0Posts
13/02/2008
Sremulador
Gostei + 0
13/02/2008
Francisco.riva1
Você conseguiu simular o erro aí ?
Se não conseguiu ... tem uma video aula do Luciano Pimenta, com o título ´Enviando email com os componentes indy´ ... tem o projeto junto com a video aula ...
É só baixá-la, acrescentar no search das options project o caminho do fasMM e colocar as units FastMM4 e FastMM4Messages, no Source, antes de Forms ..
Só de executar e sair do projeto o erro já aparece !!
21-28 bytes: TCriticalSection x 1
PS. O problema parece estar com os componentes idMessage e idSMTP da indy :(
Abraços,
Francisco.
Gostei + 0
13/02/2008
Massuda
Gostei + 0
13/02/2008
Francisco.riva1
Sim, utilizo o Indy que veio com o Delphi, mas uso o Delphi 7.
Também preciso atualizar o indy ?
Obrigado pela atenção.
Abraços,
Francisco.
Gostei + 0
13/02/2008
Massuda
Baixe o Indy 9.0.18 :arrow: [url=http://www.indyproject.org/Sockets/Download/Files/Indy9.en.aspx]desta página[/url]; essa é a última versão oficial; existe outra ´não-oficial´, mais recente, que você pode obter via CVS ou de um do :arrow: [url=http://indy.fulgan.com/ZIP/]site de snapshot[/url] do Indy. Instruções para instalação, você encontra no meio :arrow: [url=http://forum.devmedia.com.br/viewtopic.php?t=57069]deste tópico[/url]. Não recomendo usar Indy 10.
Gostei + 0
14/02/2008
Francisco.riva1
Atualizei o Indy como indicou ( Indy 9.0.18 ) ... mas esta versão parece ter vazamentos de memória também ... pelo menos é o que indica o FastMM ... :(
´Essa aplicação teve vazamentos de memória ...
21-28 bytes: TCriticalSection x 1 ´
Abraços,
Francisco.
Gostei + 0
14/02/2008
Massuda
http://forum.clubedelphi.net/viewtopic.php?t=81471
...seja útil para você.
Gostei + 0
14/02/2008
Francisco.riva1
Eu já havia lido este tópico também ... mas mesmo assim ficou difícil para eu resolver ... o vazamento de memória parece estar nos componentes da indy idSMTP e/ou idMessage :(
Coloco os dois componentes no Form o problema aparece, retiro ... o vazamento de memória é resolvido :(
Veja os detalhes :
Um bloco de memória vazou. O tamanho é: 28
Caminho da pilha quando esse bloco foi alocado (endereços de retorno):
402A87 [system.pas][System][@GetMem][2447]
40375F [system.pas][System][TObject.NewInstance][8368]
403B26 [system.pas][System][@ClassCreate][9027]
440956 [SyncObjs.pas][SyncObjs][TCriticalSection.Create][194]
4043D3 [system.pas][System][@InitResStringImports][11129]
4B910B [IdComponent.pas][IdComponent][IdComponent][185]
40432C [system.pas][System][InitUnits][10853]
404393 [system.pas][System][@StartExe][10918]
406C5F [SysInit.pas][SysInit][@InitExe][668]
5419F4 [D:\Delphi7Pesquisa\Prj\Fontes\Prj.dpr][Prj][Prj][15]
O bloco está sendo usado por um objeto da classe: TCriticalSection
O número da alocação é: 287
Dump de memória atual de 256 bytes iniciando no endereço DABD28:
10 09 44 00 20 62 14 00 ...
--------------------------------2008/2/14 20:48:56------------------------------
Essa aplicação teve vazamentos de memória. Os vazamentos dos blocos pequenos são (excluindo os vazamentos esperados registrados por ponteiro):
21 - 28 bytes: TCriticalSection x 1
...
Se descobrir alguma coisa que possa resolver este problema, por favor, conta aí pra gente que usa o Indy :)
Obrigado pela atenção !
Abraços,
Francisco.
Gostei + 0
15/02/2008
Massuda
Portanto: esse vazamento é intencional e não causará dano ao seu programa.
Gostei + 0
16/02/2008
Francisco.riva1
Abraços,
Francisco.
Gostei + 0
12/12/2008
Vitor Rubio
quando uso interfaces, não destruo meus objetos, porque as interfaces não tem um metodo destroy.
Sempre disseram que não precisa destruir objetos alocados em interfaces pois eles são destruidos quando o contador de referencias chega a zero.
Mas apesar disso, quando uso TinterfacedPersistent ou qualquer outra classe que implemente interfaces diferente de TinterfacedObject o fastmm4 me fala que houveram memory leaks.
O TinterfacedObject já funciona normal.
TAggregatedobject e tcontainedobject sempre causam memory leaks, e delegações tambem.
com relação ao comentario do indy:
GStackCriticalSection é um objeto critical section para proteger acesso simutaneo a regioes de codigo não - thread safe dentro de threads.
você pode destruir ele no finalization da ultima unit do seu projeto ou (eu acho) depois do run no seu arquivo.dpr.
mas como o massuda disse, não precisa destruir, pois uma hora ou outra ele será destruido.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)