熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

.Net程序開發中較為隱蔽的GDI洩露探析收藏

2022-06-13   來源: .NET編程 

  最近一直在調試第三方委托開發的醫療輸液系統(我接手時代碼已經完成原則上我只修改接口部分以適應我們的硬件即可不過調試過程中該程序本身問題暴露不少)該系統用開發該軟件的圖形界面是花費n多銀子專門做的美工大量的貼圖就是目前的主流PC機配置也很難在調試模式下走順溜

  問題出在兩方面第一存在內存洩露(有時間我專門為此寫篇文章)第二存在GDI洩露

  最早的時候由於存在內存洩露問題我一直以為windows彈出的GDI一般性錯誤是由於內存洩露引起的直到內存問題得以解決程序還是運行一段時間就彈出類似錯誤查了很多資料發現windows任務管理器可以查看GDI是否洩露如下圖(在查看菜單選定選擇列對話框中gdi對象選項)

  

  發現該程序的GDI對象計數猛漲由於沒有很好的GDI檢查工具和方法(如果這方面有高手希望不吝指教)所以我對程序中大段大段涉及GDI的代碼進行屏蔽然後再檢查是否GDI有洩露n次重復後功夫不負有心人終於鎖定罪魁禍首相關代碼如下

      Select Case (uPumpDataPumpName & )Trim

      Case ******

           IRBDetailIcon = IconFromHandle(CType(ImgTabPageImages() Bitmap)GetHicon)

      Case XXXXXX

          IRBDetailIcon = IconFromHandle(CType(ImgTabPageImages() Bitmap)GetHicon)

      Case Else

          IRBDetailIcon = Nothing

  End Select


From:http://tw.wingwit.com/Article/program/net/201311/12976.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.