先来一段代码:
例如:
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任务管理器”中相应测试计数器检查是否存在资源泄漏。如果程序存在资源泄漏,但是在测试时没有执行存在资源泄漏的代码,也是不能发现资源泄漏的。
资源泄漏判断标准:资源使用的一般步骤是申请资源--使用资源--释放资源。如果程序使用后没有及时释放资源,程序占用的资源就会越来越多,而系统的资源是有限的,当系统的资源被耗尽时,系统就会因为资源不足而出错。如果在重复执行某一操作时,程序占用的资源持续增加。
当然也可以用软件工具进行测试。