GDI泄露,程序发布之前的审核
来源:互联网 发布:上海java培训公司名单 编辑:程序博客网 时间:2024/05/22 01:47
转载地址:http://lmx18.blog.163.com/blog/static/43493679201166115036889/
http://blog.csdn.net/fion45/article/details/9967753
之前有一个项目因为那时对C++还不太熟悉,没有太多经验,造成了内存泄漏、线程同步、GDI对象泄漏等新手常见的问题,所以这个程序会不定时地莫名其妙地死掉,后来通过用Visual Leak Detector小心翼翼地解决了内存泄漏的问题,接着系统就稳定了很多,而且也重新看了多线程那部分,加了多个锁,也总算解决了线程同步的问题。然而系统还是隔一段时间死掉,后来在任务管理器里发现其”GDI对象“只增不减,原来还有GDI对象泄漏啊,这个好像在网上都找不到什么软件进行检测,后来查了半日资料,发现原来创建的GDI对象都必须调用相应的方法进行销毁。如下表
GDI对象
产生方法
销毁方法
位图(HBITMAP)
CreateBitmap,CreateBitmapIndirect,
CreateCompatibleBitmap,CreateDIBitmap,
CreateDIBSection,CreateDiscardableBitmap
DeleteObject
画刷(HBRUSH)
CreateBrushIndirect,CreateDIBPatternBrush,
CreateDIBPatternBrushPt,CreateHatchBrush,
CreatePatternBrush,CreateSolidBrush
DeleteObject
设备上下文(HDC)
CreateDC
DeleteDC,ReleaseDC
字体(HFONT)
CreateFont,CreateFontIndirect
DeleteObject
内存DC(HDC)
CreateCompatibleDC
DeleteDC
调色板(HPALETTE)
CreatePalette
DeleteObject
画笔(HPEN)
CreatePen,CreatePenIndirect
DeleteObject
区域(HRGN)
CombineRgn,CreateEllipticRgn,
CreateEllipticRgnIndirect,CreatePolygonRgn,
CreatePolyPolygonRgn,CreateRectRgn,
CreateRectRgnIndirect,CreateRoundRectRgn,
DeleteObject
这里还有一个问题需要注意,就是设备DC需要调用SelectObject方法来选取不同的GDI对象,当选择GDI对象时必须用一个指针记录替换出来的对象,当要结束绘图的时候再用该DC调用SelectObject方法把替换出来的对象放回去,这时调用以上的销毁方法才能成功,要不也是不能清除GDI对象的,切记。
这些问题改了我不少时间啊,以后写程序的时候一定不要再像新手一样,写得这么随便了。
- GDI泄露,程序发布之前的审核
- GDI的内存泄露问题
- 支付宝小程序审核与发布
- .Net程序开发中一个较为隐蔽的GDI泄露探析
- .Net程序开发中一个较为隐蔽的GDI泄露探析
- .Net程序开发中一个较为隐蔽的GDI泄露探析
- .Net程序开发中一个较为隐蔽的GDI泄露探析
- Winforms:消除WebBrowser的GDI Objects泄露
- 关于GDI对象泄露查找的经验总结
- STM_SETIMAGE引起的gdi内存泄露
- GDI程序的调试
- Net资源泄露(内存泄露,GDI泄露,handle 泄露等)的终极解决方案
- Net资源泄露(内存泄露,GDI泄露,handle 泄露等)的终极解决方案
- Net资源泄露(内存泄露,GDI泄露,handle 泄露等)的终极解决方案(转)
- Net资源泄露(内存泄露,GDI泄露,handle 泄露等)的终极解决方案
- GDI泄露心得
- GDI内存泄露问题
- GDI+ 内存泄露
- CocoaPods 安装 使用
- 三星手机CROM锁、OEM锁等概念的区别
- redis cluster安装以及操作
- 链表保存数据
- 利用spring配置定时任务(可多个)
- GDI泄露,程序发布之前的审核
- 时间转换
- 列表、网格等多条目数据控件在内存中实现过滤(筛选)
- bzoj3675: [Apio2014]序列分割
- string和byte[]的转换 (C#)
- 第八周--项目1-建立顺序串的算法库
- 种设置vs 环境变量的简便方法
- gets()和puts()函数分析
- C++继承:公有、私有、保护