Liberar objetos
Olá pessoal, por exemplo, criando um objeto TStringList e adicionando + 30MB de strings nele, notei que quando encerro a aplicação, esses 30MB são liberados; então minha dúvida é a seguinte:
É realmente necessário liberar objetos criados em tempo de execução no evento onDestroy do Form, ou será que é escrever código desnecessariamente ?
ps:Lembrando que esses objetos somente serão liberados junto c/ a aplicação e não antes.
É realmente necessário liberar objetos criados em tempo de execução no evento onDestroy do Form, ou será que é escrever código desnecessariamente ?
ps:Lembrando que esses objetos somente serão liberados junto c/ a aplicação e não antes.
Kapak
Curtidas 0
Respostas
Massuda
28/03/2005
...notei que quando encerro a aplicação, esses 30MB são liberados...
O Sistema Operacional irá sempre liberar toda a memória alocada por seu programa, mesmo que você não libere parte dessa memória quando seus objetos (forms, data modules, etc) são destruídos....É realmente necessário liberar objetos criados em tempo de execução no evento onDestroy do Form, ou será que é escrever código desnecessariamente ?
Com a restrição que você fez......esses objetos somente serão liberados junto c/ a aplicação e não antes
...de fato você poderia deixar de destruir/liberar os objetos.O problema, é que quando o SO libera a memória, ele não tem a mínima consciência de que eventualmente algum código precisará ser executado quando a memória é liberada.
Pode haver no tratamento do evento OnDestroy ou mesmo no destrutor desses objetos código necessário para liberar outros recursos que não seja memória (por exemplo, fechar conexão com BD, salvar alterações em arquivos, etc). O SO não irá executar esse código.
Fora isso, é considerada boa prática de programação, independente da situação, sempre liberar os recursos que você alocou.
GOSTEI 0
Kapak
28/03/2005
Olá Massuda, obrigado pela resposta.
Fora isso, é considerada boa prática de programação, independente da situação, sempre liberar os recursos que você alocou.
Na realidade sempre me preocupei em liberar objetos criados dinamicamente mesmo sendo classes criadas por mim onde seu destructor não libera recursos. A dúvida era mesmo referente à alocação de memória feita pelo Windows; parece que ele mapeia toda a memória utilizada pelo aplicativo p/ depois poder liberá-la.GOSTEI 0
Beppe
28/03/2005
Vc pode esperar sim o término que o SO libera os recursos que vc alocou. O problema com isso é que o programa pode demorar para terminar e assim recursos como memória e arquivos ficam comprometidos.
Se vc sempre tratar de finalizar e liberar recursos, seu código fica melhor protejido, já que vc pode movê-lo de um lugar para outro, e vai continuar funcionando devidamente.
Se vc sempre tratar de finalizar e liberar recursos, seu código fica melhor protejido, já que vc pode movê-lo de um lugar para outro, e vai continuar funcionando devidamente.
GOSTEI 0
Kapak
28/03/2005
Olá Beppe, sempre achei que liberar recursos alocados fosse melhor, só não sabia exatamente o porque já que o próprio Windows o faria. Agora entendo que é melhor vc liberar o máximo de recursos possíveis, aliviando assim as tarefas do SO.
GOSTEI 0