2012-05-05 30 views
0

我在應用程序中遇到GDI字體和筆刷泄漏。我怎樣才能在我的源代碼中找到創建的(和註釋掉的)對象?GDI +對象泄漏(字體,筆刷)

我沒有任何toHFont調用,並且所有對Graphics的訪問都被封裝在using語句中。我從GDIView和.NET Memory Profiler等工具知道它的筆刷和字體 - 但他們沒有說我的源代碼中哪個地方創建了泄漏對象。

我在VS2008,.NET 3.5中使用C#。

+0

這是什麼東西,你無法找回代碼審查。當然,你只能在代碼中選擇的地方使用它們?否則你將需要一個真正的內存分析器來過去這個駝峯,GDIView和.NET MP不符合這個標準。真實=金錢。 –

+0

我使用帶'Graphics'的字體並將字體分配給控件。畫筆只在'Graphics'中使用。我也嘗試重用它們,因爲它們通常是靜態變量,所以我不知道泄漏的地方。 – ZoolWay

+0

靜態變量是故意泄漏。它永遠持有對畫筆對象的引用。這樣做沒有實際意義,創建一個畫筆對象非常便宜,需要一個微秒。 –

回答

0

一個很好的做法是將你的字體和畫筆包裝在Using/End Using塊中。

+0

因爲我一次又一次地使用一些筆刷和字體,我已經把它們轉換成靜態變量,這樣它們創建的次數就會減少,而且可以重複使用。所以我不能把它們放入使用塊(我試圖用每個實現IDisposable的資源)。 – ZoolWay