Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1226807
  • 博文数量: 788
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 7005
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-19 15:52
文章存档

2017年(81)

2011年(1)

2009年(369)

2008年(337)

分类:

2008-11-05 09:52:20



procedure   XXX;  
      var  
            Dc:   Hdc;  
            Mc:   TCanvas;  
  begin    
      Dc   :=   GetDc(0);  
      Mc   :=   TCanvas.Create;  
      try  
            Mc.Handle   :=   Dc;  
            {此部分用Mc画图...省略}  
      finally  
          Mc.Free;  
          ReleaseDC(0,   Dc)  
      end  
  end;  
   
  上面这段用TCanvas画图的程序,需要循环调用好多次(认为是无数次好了),但是我发现运行当中随着时间的增长...   内存也暴涨...   很快就暴了...  
   
  本人初学图形编程,头一次暴了以后,经过查阅资料,发现忘加了ReleaseDC及Mc.Free,便改正了  
   
  但是改正后的程序,仍然内存暴涨...   求助各位高手

另外,补充一下  
   
  这段程序是作为DLL,为其他程序所用的  
  所以每次都需要GetDc和TCanvas.Create  
   
  请高手对症下药...   怎样正确的释放内存

重复调用XXX时就重复创建Mc   :=   TCanvas.Create,而没有释放,所以内存无限上涨

就这几行代码你重复调用试试,还增长吗?  
  如果不增长,那就是你省略的代码的问题

应该是你省略掉的代码有问题   用AQTime查一下就知道了

ReleaseDC(0,   Dc)  
  是否有问题啊?  
   
  ---------------------  
  矢量组件  



delphi2007 2008-11-05 09:37 发表评论
阅读(310) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~