<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    工作學習筆記――GDI泄露檢測利器

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    用.Net寫的地圖編輯器,最近在一個長時間使用的策劃手里頻繁掛掉。定位到原因應該是GDI泄露。但在幾千行代碼里手工尋找泄漏點實在是有些困難,直到在網上找到了這個檢測GDI泄露的工具GDILeaks。它的強大之處,在于可以將程序里當前占用的gdi位圖、dc用圖形格式顯示出來,這樣,泄露點基本上就直接展示在你眼前了。

    RFID設備管理軟件


    另外,關于泄露為什么會發生,我還有些疑問。經檢查,泄漏點是這樣的C#代碼

    void doSomeThing()

    {

    Bitmap tmpBmp = new Bitmap(100,100);

    return transformBmp(tmpBmp); //這里對tmpBmp放大后存到一張新位圖上返回,并沒有再引用tmpBmp

    }

    泄露的是tmpBmp。按我對垃圾回收的理解,出了這個函數,tmpBmp的生命期也就結束了,應該可以被回收掉。實際發生的是,如果不加一句tmpBmp.Dispose(),gdi資源會一直增加,直到彈出資源耗盡的警告對話框。


    在MSDN上查了一下,Bitmap對gdi資源的釋放是在它的finalize方法里,但是這個方法不一定保證會執行(比如它被別的finalize方法阻塞了)。不知道我這里碰到的,屬不屬于這種情況。

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全