初遇资源泄漏

先来一段代码:

 

例如:

void CXXXView::ShowImage()

{

      SetRGBInfo(ImgWidth,ImgHeight);

      CDC* pDC=GetDC();

      m_hDC=pDC->GetSafeHdc();

      if(!full_screen)    //非全屏模式

      {        

           CPoint scrollPt = GetScrollPosition();

           DrawDibDraw(

                 m_hDrawDib,

                 m_hDC,

                 -scrollPt.x,//视口

                 -scrollPt.y,

                 ImgWidth,

                 ImgHeight,

                 pRGBInfo,

                 pRGB,

                 0,//窗口

                 0,

                 ImgWidth,

                 ImgHeight,

                 0);

      }

      else

      {

DrawDibDraw(

m_hDrawDib,

m_hDC,

0,

0,

ImgWidth,

ImgHeight,

pRGBInfo,

pRGB,

0,

0,

ImgWidth,

ImgHeight,

0);

      }

}

 

在这段代码中,由于没有添加RealeaseDC();

所以出现了资源泄漏的情况。

 

 

可以看到:

内存增量中也可以看到不停的有4k的内存增加。

GDI对象的数量也不停增加。而正常情况下,不会出现这种情况。GDI数量会维持在一个常值。

 

重复执行可能存在资源泄漏的操作,这一点非常关键。测试前首先应该分析一下,程序的哪里可能存在资源泄漏,然后重复大量的执行这些操作,操作的同时可以查看“windows任务管理器中相应测试计数器检查是否存在资源泄漏。如果程序存在资源泄漏,但是在测试时没有执行存在资源泄漏的代码,也是不能发现资源泄漏的。

资源泄漏判断标准:资源使用的一般步骤是申请资源--使用资源--释放资源。如果程序使用后没有及时释放资源,程序占用的资源就会越来越多,而系统的资源是有限的,当系统的资源被耗尽时,系统就会因为资源不足而出错。如果在重复执行某一操作时,程序占用的资源持续增加。

 

当然也可以用软件工具进行测试。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值