Vazamento de memória: o que é isso?
Já li em alguns lugares que certo código tinha um problema de ´vazamento de memória´ :shock: . O que é isso :?:
Algo tipo monitor de cristal liquido, que quando quebra vazam os cristais (afinal são cristais liquidos)? :D (já ouvi essa em sala de aula, desculpem mas não resisti....)
Algo tipo monitor de cristal liquido, que quando quebra vazam os cristais (afinal são cristais liquidos)? :D (já ouvi essa em sala de aula, desculpem mas não resisti....)
Willian
Curtidas 0
Respostas
Osocram
13/07/2009
Então amigo... Essa é uma parte que poucos programadores se preocupam, infelizmente.
E é um dos principais motivos dos milagrosos ´Access violation´ que aparecem do nada.
Mas é o seguinte respondendo a sua pergunta:
- Se vc criar um componente em Run-time e não destruir ele, ele vai ficar na memoria p sempre enqto seu sistema esta aberto. Agora para piorar um pouco mais, imagina que vc cria um compenente no on create do form e não destroi o componente, agora imagina que vc abre este form varias vezes. então vai ficar com varios lixos na memoria.
por isso é recomendavel sempre que cria um objeto usar Try finally
ex.
objeto := TObject.Create;
try
faz as coisas
finally
FreeAndNil(objeto)
end;
e perceba que o TObject.Create esta fora do Try... Muitos erram em deixar ele dentro do bloco Try, e tem que ficar fora mesmo.. pois se der um erro ao criar ele nao deve ir para o finally pois vai dar erro qdo tentar liberar um objeto e ele não estiver criado.
Espero ter explicado em vez de complicado.
Flw.
E é um dos principais motivos dos milagrosos ´Access violation´ que aparecem do nada.
Mas é o seguinte respondendo a sua pergunta:
- Se vc criar um componente em Run-time e não destruir ele, ele vai ficar na memoria p sempre enqto seu sistema esta aberto. Agora para piorar um pouco mais, imagina que vc cria um compenente no on create do form e não destroi o componente, agora imagina que vc abre este form varias vezes. então vai ficar com varios lixos na memoria.
por isso é recomendavel sempre que cria um objeto usar Try finally
ex.
objeto := TObject.Create;
try
faz as coisas
finally
FreeAndNil(objeto)
end;
e perceba que o TObject.Create esta fora do Try... Muitos erram em deixar ele dentro do bloco Try, e tem que ficar fora mesmo.. pois se der um erro ao criar ele nao deve ir para o finally pois vai dar erro qdo tentar liberar um objeto e ele não estiver criado.
Espero ter explicado em vez de complicado.
Flw.
Já li em alguns lugares que certo código tinha um problema de ´vazamento de memória´ :shock: . O que é isso :?:
Algo tipo monitor de cristal liquido, que quando quebra vazam os cristais (afinal são cristais liquidos)? :D (já ouvi essa em sala de aula, desculpem mas não resisti....)
GOSTEI 0
Willian
13/07/2009
Respondeu sim, muito obrigado.
GOSTEI 0