Pessoal,

Estamos fazendo testes com o pool do DBExpress 4 onde trabalho. Contudo, 
percebemos que, claramente a framework está gerando um pequeno memory leak 
(isso mesmo!!!). Contudo, vamos desenvolver um serviço que será consumido 
centenas de vezes ao dia. Esse pequeno memory leak vai derrubar o servidor em 
pouco tempo.

Código de exemplo: 

 Connection := TDBXConnectionFactory.GetConnection
    if (System.Assigned(Connection)) then begin
      try
         // (...)
      finally
          SysUtils.FreeAndNil(Connection);
      end;
    end;
  
 Cada requisição cai num código como o acima. De fato, o Connection é  liberado 
da memória, porém alguns elementos internos dele, não. Utilizei o  
"ReportMemoryLeaksOnShutdown := True;" para perceber isso.

  
 Segue abaixo o Memory Leak Report:
  
 ---------------------------
Unexpected Memory  Leak
---------------------------
An unexpected memory leak has occurred.  The unexpected small block leaks are:
  
 1 - 12 bytes: TDBXProperties x 1
  
 61 - 68 bytes: TWideStringList x 1
  
 237 - 252 bytes: Unknown x 1
 
---------------------------

 Importante: Estes 3 objetos (TDBXProperties, TWideStringList e o Unknown),  
são gerados para cada requisição. Ou seja: se eu receber 100 requisições, serão 
 gerados 100 destes 3 objetos. Para tirar a dúvida se o problema era com o  
Command ou o Reader que utilizam a conexão, fizemos uma aplicação que apenas 
efetua o GetConnection e em seguida damos um Free nela, sem utilizarmos 
absolutamente  nada e o erro foi exatamente o mesmo.

Alguém, especialmente algum evangelizador, sabe como resolver/contornar esse 
problema? Se precisar, posso enviar um pequeno projeto para demonstrar o memory 
leak.

       
---------------------------------
Abra sua conta no Yahoo! Mail, o único sem limite de espaço para armazenamento! 

[As partes desta mensagem que não continham texto foram removidas]

Responder a