Delphi图片资源释放问题,高手请进!(100分)

  • 主题发起人 主题发起人 yandong_mars
  • 开始时间 开始时间
Y

yandong_mars

Unregistered / Unconfirmed
GUEST, unregistred user!
循环调入一个图片800*600,100次后,占用了相当大的虚拟内存(143M) 代码中内存已经进行了释放,同事告诉我这是Delphi的问题,请问是真的吗?怎么手工给释放一下呢!?

代码如下
procedure TForm1.Button1Click(Sender: TObject);
var
BitMap1:TBitMap;
begin
BitMap1 := TBitMap.Create;
BitMap1.LoadFromFile('D:/Documents and Settings/Administrator/桌面/客_.bmp');
BitMap1.Dormant;
BitMap1.FreeImage;
Image1.Canvas.Draw(0,0,BitMap1);
BitMap1.ReleaseHandle;
BitMap1.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i:integer;
begin
for i:=1 to 100 do
begin
Label1.Caption := inttostr(i);
Application.ProcessMessages;
Button1.Click;
end;
end;

 
-->BitMap1.ReleaseHandle;
去掉就没有问题了。
TBitmap.ReleaseHandle并不是释放handle, 而是简单将handle赋值给result, 然后将内部handle置为0,dibbits置为nil, 并没有真正释放资源,这个函数是用于将一个HBITMAP直接赋给TBitmap时用的。
 
BitMap1.Free;
bitmpa1:=nil;
 
BitMap1 := TBitMap.Create;
try
BitMap1.LoadFromFile('D:/Documents and Settings/Administrator/桌面/客_.bmp');
Image1.Canvas.Draw(0,0,BitMap1);
finally
BitMap1.Free;
end;
 
呵呵 多谢多谢!
 
后退
顶部