Carregar imagem do BD em um TIMAGE

Delphi

03/07/2016

Estou usando o codigo abaixo para mostrar uma imagem jpeg que foi salva em um banco FIREBIRD . Porém tenho uma duvida, na hora de liberar a memoria do objeto b (STREAM) o correto é usar B.DESTROY como no codigo abaixo ou usar B.FREE?

Preciso saber disso porque este codigo vai ser usado com frequencia e não quero ter problemas de memoria na maquina do usuario.

var jpg : TJpegImage; 
b : TStream; 

... 

If not(fieldbyname(\'Foto\').isnull) 
then begin 
b:= CreateBlobStream(fieldbyname(\'Foto\'),bmRead); 
if b.size > 0 
then Try 
Jpg := TJpegImage.create; 
jpg.LoadFromStream(b); 
Image1.Picture.Assign(Jpg); 
except 
ShowMessage(\'Erro\'); 
end 
else Image1.Picture.assign(nil); 
b.Destroy; 
jpg.free; 
end 
else Image1.Picture.assign(nil); 



A linha b.destroy é o melhor modo de liberar a memoria do objeto b ou o melhor é usar b.free?
Luiz Carlos

Luiz Carlos

Curtidas 0

Respostas

Mateus Ribeiro

Mateus Ribeiro

03/07/2016

Bom dia!
Eu particularmente usaria o FreeAndNil(), o Free destroi o objeto mas permanece indicando seu endereço na memória! O FreeAndNil() destroi o objeto e apaga quaquer indicio dele da memória. Boa sorte!
GOSTEI 0
POSTAR