山西省住房与城乡建设厅如何优化其官方网站以增强用户体验?
摘要:山西省住房与城乡建设厅网站,强化网站建设,深圳品牌蛋糕店有哪些品牌排行,游戏代理0加盟费目录 1、GDI对象泄漏 1.1、何为GDI资源泄漏? 1.2、使用GDIView工具排查GDI对象泄漏 1.3、有时可能
山西省住房与城乡建设厅网站,强化网站建设,深圳品牌蛋糕店有哪些品牌排行,游戏代理0加盟费目录
1、GDI对象泄漏
1.1、何为GDI资源泄漏#xff1f;
1.2、使用GDIView工具排查GDI对象泄漏
1.3、有时可能需要结合其他方法去排查
1.4、如何保证没有GDI对象泄漏#xff1f;
2、进程句柄泄漏
2.1、何为进程句柄泄漏#xff1f;
2.2、创建线程时的线程句柄泄漏
…目录
1、GDI对象泄漏
1.1、何为GDI资源泄漏
1.2、使用GDIView工具排查GDI对象泄漏
1.3、有时可能需要结合其他方法去排查
1.4、如何保证没有GDI对象泄漏
2、进程句柄泄漏
2.1、何为进程句柄泄漏
2.2、创建线程时的线程句柄泄漏
3、内存泄漏
3.1、在多态中没有将父类的析构函数声明为virtual函数导致没有执行到子类的析构函数
3.2、使用智能指针shared_ptr发生循环引用问题导致内存泄漏
3.3、第三方注入库有内存泄漏导致进程有内存泄漏
3.4、内存泄漏的危害
3.5、内存泄漏的排查
4、最后 VC常用功能开发汇总专栏文章列表欢迎订阅持续更新...https://blog.csdn.net/chenlycly/article/details/124272585C软件异常排查从入门到精通系列教程专栏文章列表欢迎订阅持续更新...https://blog.csdn.net/chenlycly/article/details/125529931C软件分析工具从入门到精通案例集锦专栏文章正在更新中...https://blog.csdn.net/chenlycly/article/details/131405795C/C基础与进阶专栏文章持续更新中...https://blog.csdn.net/chenlycly/category_11931267.html 在C程序开发维护过程中时常会遇到资源泄漏问题比如GDI对象泄漏、进程线程句柄泄漏以及内存泄漏问题。今天我们就来深入探讨一下这几类资源泄漏以及排查这些泄露的办法。
1、GDI对象泄漏 在Windows平台上做UI客户端编程很多时候都是使用系统GDI对象进行窗口的绘制常见的GDI对象有Pen用来绘制线条的画笔、Brush用来填充颜色的画刷、Bitmap用来处理图片的位图、Font用来设置文字大小的字体、Region区域、DC设备上下文等。
1.1、何为GDI资源泄漏 对于Pen、Brush、Bitmap和Region等在使用前我们需要调用创建这些对象的接口把对象创建出来比如CreatePen/CreatePenIndirect、CreateSolidBrush/CreateBrushIndirect、CreateFont/CreateFontIndirect、CreateCompatibleBitmap等API接口然后在使用完这些对象后需要调用DeleteObject将对象释放掉。对于DC对象则一般调用GetDC去获取窗口的DC对象然后在不使用时需要调用ReleaseDC将DC释放掉。如果不释放这些对象则会导致GDI对象泄漏。 在Windows程序中一个进程的GDI对象总数是有上限的默认情况下上限值为10000个。可以从如下的注册表中可以看到这个值是系统设置的默认值一般情况下不用修改即使修改也不能改成很大的值。 如果发生GDI对象泄漏的代码段频繁地执行程序在持续运行一段时间后进程的GDI对象总数接近或达到10000个上限。当接近上限时就会出现GDI绘图函数内部发生错误返回失败导致窗口绘制异常。紧接着可能就会产生崩溃闪退。
1.2、使用GDIView工具排查GDI对象泄漏 GDI对象持续泄漏对程序可能是致命的一旦接近或达到上限就会导致程序发声崩溃闪退。GDI对象泄漏问题排查起来相对容易一些先用GDIView工具先看一下是哪类GDI对象有泄漏 然后有针对性的查看操作这类GDI对象的代码然后逐步缩小排查的范围。 如果出现窗口绘制或显示异常或者程序无故闪退可以到任务管理器中查看进程的GDI对象总数的值默认情况下不显示GDI对象列右键点击标题栏在弹出窗口中勾选GDI对象选项即可显示 如果总数接近10000个肯定是GDI对象泄漏导致的。可以重新启动程序然后再任务管理器中持续观察进程的GDI对象总数。
1.3、有时可能需要结合其他方法去排查 有时也要结合其他方法来辅助定位比如可以使用历史版本比对法看看是从哪天开始出现泄漏。然后查看前一天svn或git上的代码提交记录或者底层模块库发布记录这样就能有效的缩小问题的排查范围。有次项目中出的问题就出在底层的WebRTC开源库中。
