在 WINCE 开发中使用 GDI 绘图时,碰到的内存泄露问题
来源:互联网 发布:台湾网络电视直播apk 编辑:程序博客网 时间:2024/05/08 11:18
大白天的见活鬼,十分的无语:
在一个 CDialog 中写了个 Timer ,Timer中有一段用 GDI 绘图的代码如下:
void WaveDlg::OnTimer(UINT_PTR nIDEvent)
{
CWnd *pWave=GetDlgItem(IDC_WAVE);
CClientDC pdc(pWave);
}
很好,就这两行代码,其他的啥也没有,运行期间没有任何内存泄露。
可以注意到,我申请了一个 pdc ,并且没有去手写任何代码去释放它,因为我认为 CClientDC pdc(pWave); 这条语句所生成的对象,会在 OnTimer 函数结束时,自动析构。事实也是如此,就这两行代码,没有任何内存泄露,我特意把 Timer 的触发时间调整为 1ms,触发快,内存泄露明显,不用慢慢等。
OK,接着来,修改代码如下:
void WaveDlg::OnTimer(UINT_PTR nIDEvent)
{
CWnd *pWave=GetDlgItem(IDC_WAVE);
CClientDC pdc(pWave);
CBrush brsWhite;
brsWhite.CreateSolidBrush(RGB(255,255,255));
pdc.SelectObject(brsWhite);
::DeleteObject(brsWhite.m_hObject);
}
运行,内存一“泄”千里。。。。
无奈,再次尝试,修改代码如下:
void WaveDlg::OnTimer(UINT_PTR nIDEvent)
{
CWnd *pWave=GetDlgItem(IDC_WAVE);
CClientDC pdc(pWave);
CBrush brsWhite;
brsWhite.CreateSolidBrush(RGB(255,255,255));
pdc.SelectObject(brsWhite);
::DeleteObject(brsWhite.m_hObject);
::ReleaseDC(pWave->m_hWnd,pdc.m_hDC);
}
运行,不漏了。。。。
总结,在某个函数中,申请了一个局部的 CDC 后,如果,不对它进行修改,比如用它去 selectobject 某些对象,或者,不用它去画图,那么,可以不用手写代码去释放它。但是,一旦引用了这个 CDC 做了某些工作,那么,就需要手写代码去释放它了。。。
最后,为了保险起见,将所有的 CPen,CBrush 都声明为类成员,而不是局部变量,只在类成员初始化的时候,对他们调用一次 Create ,避免在局部函数中反复对他们调用 Create,避免内存泄露
- 在 WINCE 开发中使用 GDI 绘图时,碰到的内存泄露问题
- GDI的内存泄露问题
- GDI内存泄露问题
- 在LoaderCallbacks中使用CursorAdapter造成的内存泄露问题
- 开发某WinCE MFC GDI程序中遇到的问题——bmp解析,lib,gdi
- WinCE的内存泄露
- WinCE的内存泄露
- WinCE的内存泄露
- GDI 绘图 内存泄漏问题
- 在java开发过程中经常碰到数据类型的问题
- VS 2010 在开发过程中碰到的问题整理
- Android开发中使用Handler类造成的内存泄露问题
- 解决.net 2.0以上版本GDI+绘图保存后在Photoshop中无法识别的问题
- Android内存泄露检测工具和实际开发中遇到的内存泄露问题解析
- 【VS2013中使用GDI+绘图】
- Android中使用中Handler的内存泄露问题
- ATS插件开发中内存泄露问题的解决方法探讨
- android开发中,可能会导致内存泄露的问题
- Android-- FragmentPagerAdapter,FragmentStatePagerAdapter
- Mobile First!开源HTML5游戏引擎Kiwi.js 1.0正式发布
- Xib控件自适应教程
- iOS7 使用Core Graphics 和 Core Image
- Fortify SCA 分析代码漏洞全解
- 在 WINCE 开发中使用 GDI 绘图时,碰到的内存泄露问题
- 静语流年,凝眸时光
- 新概念英语第一册 学习笔记(002 - 003)
- 多说评论嵌套
- Python\PyQt4\SIP编译步骤
- ThinkPHP的输出和模型使用
- JDBC 访问数据库的基本步骤(选出要熟记的部分)
- mp3与aac音频格式的比较
- java并发编程