首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GDI句柄泄漏

GDI句柄泄漏
EN

Stack Overflow用户
提问于 2013-06-14 00:08:27
回答 1查看 1.2K关注 0票数 1

我遇到了一个GDI句柄的问题,我知道windows限制每个应用程序的GDI句柄数量为10.000。然后应用程序崩溃。

在我自己的系统和几个虚拟机上,GDI句柄的数量保持在300到500之间……不管我做什么。在客户项目上,它越来越高,直到几天后达到10.000。

代码语言:javascript
复制
13.06.2013: 12:47 GDI-Handles 1550

13.06.2013: 12:59 GDI-Handles 1553

13.06.2013: 13:07 GDI-Handles 1557

13.06.2013: 13:55 GDI-Handles 1564

13.06.2013: 15:29 GDI-Handles 2193

13.06.2013: 16:47 GDI-Handles 2201

13.06.2013: 17:14 GDI-Handles 2201

13.06.2013: 17:21 GDI-Handles 2201

13.06.2013: 17:29 GDI-Handles 2263

为什么在另一台安装了完全相同的.NET应用程序的pc上的行为会如此不同?如果不在系统上安装visual studio,你知道怎么调试它吗?

EN

回答 1

Stack Overflow用户

发布于 2013-06-14 21:28:10

我解决了这个问题。在系统上,我运行了工具"GDIView“。有了这个工具,我就能够确定导致问题的对象是Bitmap。我找到了引起麻烦的位图,并发现我必须手动处理IntPtr (那里的GC没有帮助)。

代码语言:javascript
复制
            ImageSource wpfBitmap = null;

            if (this.buttonImage != null)
            {

                IntPtr hBitmap = this.buttonImage.GetHbitmap();

                wpfBitmap = Imaging.CreateBitmapSourceFromHBitmap(
                   hBitmap, IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());

                DeleteObject(hBitmap);
            }

            return wpfBitmap;

因此,我只添加了"DeleteObject()“方法,泄漏就消失了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17091898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档