Fórum Carregar imagem do BD em um TIMAGE #558881

03/07/2016

0

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

Responder

Posts

04/07/2016

Mateus Ribeiro

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!
Responder

Gostei + 0

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

Aceitar