最近一直在调试第三方委托开发的医疗输液系统(我接手时代码已经完成原则上我只修改接口部分以适应我们的硬件即可不过调试过程中该程序本身问题暴露不少)该系统用开发该软件的图形界面是花费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