|
网上有文章说,使用从CWnd派生类中的GetDC()和ReleaseDC()会出现内存泄漏,不知道是否属实?
我使用以下代码进行测试:
使用一Timer,进行窗口Invalidate()。
void CTestDCDlg::OnPaint()
{
//CPaintDC dc(this); // device context for painting
int iCount = 0;
CDC *pDC;
MEMORYSTATUS MemoryInfo;
CString csOutput;
MemoryInfo.dwLength = sizeof(MEMORYSTATUS);
for(iCount = 0;iCount< 100;iCount++)
{
pDC = GetDC();
GlobalMemoryStatus(&MemoryInfo);
csOutput.Format(TEXT("Timer:%d.dwAvailPhys:%d."),guiTimerCount++,MemoryInfo.dwAvailPhys);
RETAILMSG(1,(TEXT("==Timer Count:%d.dwAvailPhys:%d,dwAvailVirtual:%d.\r\n"), guiTimerCount,MemoryInfo.dwAvailPhys,MemoryInfo.dwAvailVirtual));
pDC->ExtTextOut(10,10,ETO_CLIPPED,NULL,csOutput,NULL);
ReleaseDC(pDC);
}
// TODO: Add your message handler code here
// Do not call CDialog::OnPaint() for painting messages
}
输入的调试信息如下:
...
==Timer Count:10.dwAvailPhys:17805312,dwAvailVirtual:31522816.
...
==Timer Count:100.dwAvailPhys:17805312,dwAvailVirtual:31522816.
...
==Timer Count:10000.dwAvailPhys:17805312,dwAvailVirtual:31522816.
...
不知道是不是我的测试代码有问题,测试出来的结果是:没有内存泄漏的问题!
|
|