out of memory - Delphi 10.3

08/12/2022

0

Pessoal, tenho uma aplicação feita em Delphi 10.3 com várias linhas de códigos e utilizo o Firebird para acesso as minhas tabelas do banco de dados.
Em um dado momento, quando entro em um determinado formulário, o sistema emite a mensagem de erro "out of memory" e trava todo o sistema.
Pelo gerenciador de tarefas percebi que a memória do computador chega a quase 2GB.
Já procurei na internet soluções de criar e destruir formulários, mas aparentemente não está resolvendo.
Alguém pode me ajudar a solucionar este caso?

grato

Rones.
Rones

Rones

Responder

Post mais votado

08/12/2022

Pessoal, tenho uma aplicação feita em Delphi 10.3 com várias linhas de códigos e utilizo o Firebird para acesso as minhas tabelas do banco de dados.
Em um dado momento, quando entro em um determinado formulário, o sistema emite a mensagem de erro "out of memory" e trava todo o sistema.
Pelo gerenciador de tarefas percebi que a memória do computador chega a quase 2GB.
Já procurei na internet soluções de criar e destruir formulários, mas aparentemente não está resolvendo.
Alguém pode me ajudar a solucionar este caso?

grato

Rones.


Isso é vazamento de memória no seu aplicativo.
Deve existir diversos locais onde você cria objetos manualmente e não destrói após o uso.

ReportMemoryLeaksOnShutdown := True;


Adicione essa linha no seu .DPR e vá abrindo uma tela por vez e feche o sistema em seguida, ele vai te mostrar quais objetos estão causando o problema.

Boa sorte!


Sim, obrigado.

em qual local do .DPR coloque este código? Como abrir uma tela por vez?
Desculpe, sou novato.
Rones.



Você vai colocar esse comando dentro do bloco Begin End como algo próximo ao código abaixo:

begin
  ReportMemoryLeaksOnShutdown := True;


  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmPrincipal, frmPrincipal);
  Application.Run;
end.


E Quanto ao abri um form (tela) e fechar o sistema, é literalmente isso que você deve fazer.

Esse comando que lhe passei vai varrer seu código e mostrar os objetos que foram criados em tempo de execução e não foram destruídos.

Comece com o form principal do sistema, literalmente abra o sistema e feche em seguida. Se você abrir várias telas vai ficar mais difícil identificar onde estão os vazamentos, uma vez que o comando vai coletando as informações, mas não mostra de onde vem elas (por isso abrir uma tela por vez).

Deve aparecer um modal com as informações capturadas, e entre elas os objetos que precisam ser encerrados.

Claudio Andrade

Claudio Andrade
Responder

Mais Posts

08/12/2022

Claudio Andrade

Pessoal, tenho uma aplicação feita em Delphi 10.3 com várias linhas de códigos e utilizo o Firebird para acesso as minhas tabelas do banco de dados.
Em um dado momento, quando entro em um determinado formulário, o sistema emite a mensagem de erro "out of memory" e trava todo o sistema.
Pelo gerenciador de tarefas percebi que a memória do computador chega a quase 2GB.
Já procurei na internet soluções de criar e destruir formulários, mas aparentemente não está resolvendo.
Alguém pode me ajudar a solucionar este caso?

grato

Rones.


Isso é vazamento de memória no seu aplicativo.
Deve existir diversos locais onde você cria objetos manualmente e não destrói após o uso.

ReportMemoryLeaksOnShutdown := True;


Adicione essa linha no seu .DPR e vá abrindo uma tela por vez e feche o sistema em seguida, ele vai te mostrar quais objetos estão causando o problema.

Boa sorte!
Responder

08/12/2022

Rones

Pessoal, tenho uma aplicação feita em Delphi 10.3 com várias linhas de códigos e utilizo o Firebird para acesso as minhas tabelas do banco de dados.
Em um dado momento, quando entro em um determinado formulário, o sistema emite a mensagem de erro "out of memory" e trava todo o sistema.
Pelo gerenciador de tarefas percebi que a memória do computador chega a quase 2GB.
Já procurei na internet soluções de criar e destruir formulários, mas aparentemente não está resolvendo.
Alguém pode me ajudar a solucionar este caso?

grato

Rones.


Isso é vazamento de memória no seu aplicativo.
Deve existir diversos locais onde você cria objetos manualmente e não destrói após o uso.

ReportMemoryLeaksOnShutdown := True;


Adicione essa linha no seu .DPR e vá abrindo uma tela por vez e feche o sistema em seguida, ele vai te mostrar quais objetos estão causando o problema.

Boa sorte!


Sim, obrigado.

em qual local do .DPR coloque este código? Como abrir uma tela por vez?
Desculpe, sou novato.
Rones.
Responder

27/12/2022

Arthur Heinrich

Existem múltiplas causas possíveis para um estouro de memória. Então, fica difícil adivinhar o que pode ser.

Mas, imagino que você tenha criado um form com um DB Grid ou algo parecido, que está carregando o conteúdo de uma tabela.

O que você espera que ocorra se esta tabela tiver 1 TB?

Componentes que carregam dados de tabela parecem fáceis de usar, mas na prática, são quase inúteis. Antes de carregar os dados, a aplicação precisa definir filtros adequados, que reduzam o volume de dados acessados e, só então, você executa a query com os filtros, dinamicamente.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar