Delphi中多线程使用GDI,老是内存泄露。感觉像是释放不掉
Delphi中多线程使用GDI,总是内存泄露。感觉像是释放不掉
这是我线程中的代码,如果放在主线程中是没有问题的,可是放在子线程中的时候就老是出现内存泄露,我到底哪里出问题了呀,申请的一些对象都已经释放掉了呀,而且用API都把那些什么逻辑笔什么其他的都释放掉啦,为什么还是不行呀?有哪位大虾碰到过,帮帮我,跪谢啦。
var i:integer;
BMP:TBitmap;
Stream:TStream;
begin
for i:=0 to 1500 do
begin
Stream:=TMemoryStream.Create;
BMP:=TBitmap.Create
BMP.Canvas.Font.Color:=0
BMP.Canvas.Font.Size:=10
BMP.Canvas.Font.Name:='宋体';
BMP.Width:=160;
BMP.Height:=16;
BMP.Canvas.TextOut(0,0,'成功');
BMP.PixelFormat:=pf1bit;
BMP.SaveToStream(Stream);
DeleteObject(BMP.Handle);//-----使用API函数释放
BMP.Free;
Stream.Free;
end;
ShowMessage('测试成功!');
------解决方案--------------------
加异常判断看看
------解决方案--------------------
最好不要不停的创建释放
把Create和Free写到for循环外面
------解决方案--------------------
把free换成FreeAndNil()试试。每次循环Sleep(100)~~
------解决方案--------------------
那就把create和free的方法放在循环外,在循环内部,执行 BMP.SaveToStream(Stream); 之前,stream.position:= 0;
试试行不~
------解决方案--------------------
没看到你有线程同步的代码。
这是我线程中的代码,如果放在主线程中是没有问题的,可是放在子线程中的时候就老是出现内存泄露,我到底哪里出问题了呀,申请的一些对象都已经释放掉了呀,而且用API都把那些什么逻辑笔什么其他的都释放掉啦,为什么还是不行呀?有哪位大虾碰到过,帮帮我,跪谢啦。
var i:integer;
BMP:TBitmap;
Stream:TStream;
begin
for i:=0 to 1500 do
begin
Stream:=TMemoryStream.Create;
BMP:=TBitmap.Create
BMP.Canvas.Font.Color:=0
BMP.Canvas.Font.Size:=10
BMP.Canvas.Font.Name:='宋体';
BMP.Width:=160;
BMP.Height:=16;
BMP.Canvas.TextOut(0,0,'成功');
BMP.PixelFormat:=pf1bit;
BMP.SaveToStream(Stream);
DeleteObject(BMP.Handle);//-----使用API函数释放
BMP.Free;
Stream.Free;
end;
ShowMessage('测试成功!');
------解决方案--------------------
加异常判断看看
try
try
// 处理代码
except
// 日志
end;
finally
end;
------解决方案--------------------
最好不要不停的创建释放
把Create和Free写到for循环外面
------解决方案--------------------
把free换成FreeAndNil()试试。每次循环Sleep(100)~~
------解决方案--------------------
那就把create和free的方法放在循环外,在循环内部,执行 BMP.SaveToStream(Stream); 之前,stream.position:= 0;
试试行不~
------解决方案--------------------
没看到你有线程同步的代码。