簡體   English   中英

GDI手柄泄漏

[英]GDI-Handle Leak

我遇到了GDI-Handle的問題。 我知道Windows限制每個應用程序的GDI句柄數量為10.000。 然后應用程序崩潰。

在我自己的系統和幾個虛擬機上,無論執行什么操作,GDI句柄的數量都保持在300到500之間。 在客戶項目上,它越來越高,直到幾天后達到10.000。

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的情況下調試它嗎?

我解決了問題。 在系統上,我得到了運行工具“ GDIView”的錯誤。 使用此工具,我能夠確定導致問題的對象是位圖。 我發現位圖引起了麻煩,並發現必須手動處理IntPtr(那里的GC沒有幫助)。

            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()”方法,泄漏就消失了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM