zoukankan      html  css  js  c++  java
  • 工作学习笔记——GDI泄露检测利器

    用.Net写的地图编辑器,最近在一个长时间使用的策划手里频繁挂掉。定位到原因应该是GDI泄露。但在几千行代码里手工寻找泄漏点实在是有些困难,直到在网上找到了这个检测GDI泄露的工具GDILeaks。它的强大之处,在于可以将程序里当前占用的gdi位图、dc用图形格式显示出来,这样,泄露点基本上就直接展示在你眼前了。



    另外,关于泄露为什么会发生,我还有些疑问。经检查,泄漏点是这样的C#代码

    void doSomeThing()

    {

    Bitmap tmpBmp = new Bitmap(100,100);

    return transformBmp(tmpBmp); //这里对tmpBmp放大后存到一张新位图上返回,并没有再引用tmpBmp

    }

    泄露的是tmpBmp。按我对垃圾回收的理解,出了这个函数,tmpBmp的生命期也就结束了,应该可以被回收掉。实际发生的是,如果不加一句tmpBmp.Dispose(),gdi资源会一直增加,直到弹出资源耗尽的警告对话框。


    在MSDN上查了一下,Bitmap对gdi资源的释放是在它的finalize方法里,但是这个方法不一定保证会执行(比如它被别的finalize方法阻塞了)。不知道我这里碰到的,属不属于这种情况。

  • 相关阅读:
    bzoj4849: [Neerc2016]Mole Tunnels
    bzoj 4069~4071 APIO2015
    bzoj 4885: [Lydsy2017年5月月赛]长方体
    bzoj4891: [Tjoi2017]龙舟
    bzoj4892: [Tjoi2017]dna
    bzoj 3159: 决战
    bzoj3672: [Noi2014]购票
    bzoj4738: 汽水
    bzoj 4737: 组合数问题
    bzoj 4872: [Shoi2017]分手是祝愿
  • 原文地址:https://www.cnblogs.com/lidabo/p/3430205.html
Copyright © 2011-2022 走看看