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('测试成功!'); 
------解决方案--------------------
加异常判断看看

try
  try
    // 处理代码
  except
    // 日志
  end;
finally
end;

------解决方案--------------------
最好不要不停的创建释放
把Create和Free写到for循环外面
------解决方案--------------------
把free换成FreeAndNil()试试。每次循环Sleep(100)~~ 
------解决方案--------------------
那就把create和free的方法放在循环外,在循环内部,执行  BMP.SaveToStream(Stream); 之前,stream.position:= 0; 

试试行不~
------解决方案--------------------
没看到你有线程同步的代码。