2012-07-23 43 views
4

我在我的C#代碼行,爲了測量一個字符串的長度創建字體:這個Font對象什麼時候被丟棄?

int width = (int)(myGraphics.MeasureString(text, new Font(myFontName, myFontSize, FontStyle.Bold)).Width); 

我的問題是,當被設置在new Font()變量?它是在處理表單時處理,還是立即處理?

+2

它根本沒有處置。 – 2012-07-23 21:28:59

回答

8

Font有終結聲明:

~Font() 
{ 
    this.Dispose(false); 
} 

當字體對象創建的,它是在結束隊列註冊。這些對象在垃圾收集期間不會被銷燬(即分配內存) - 當終結器被調用(btw終結器可能永遠不會被執行)時,它們會在後面銷燬。因此更好地通過手動或通過using聲明致電Dispose聲明。在這種情況下的字體對象將被設置,並且從最終確定未登記(因此它將被從存儲器垃圾收集過程中被除去):

public void Dispose() 
{ 
    this.Dispose(true); 
    GC.SuppressFinalize(this); 
} 

可以瞭解更多關於無用單元收集和定稿in Jeffrey Richter's article

+1

+1,唯一正確的答案到目前爲止,除了當你說「處置」你真的意思是「從內存中刪除」。 – 2012-07-23 21:38:04

+0

@KrisVandermotten謝謝:)我在回答中做了一些改進 – 2012-07-23 21:42:41

+1

我不希望這是答案(我想依靠C#GC),但是在做了更多的研究之後([我發現這個](http: //social.msdn.microsoft.com/Forums/is/csharpgeneral/thread/ba9b136c-15b0-42bf-87b6-bdbe38f0b4c7))我相信你是對的。感謝你的回答。 – 2012-07-24 15:59:47

-2

應當設置每當垃圾收集器感覺像。你不應該依賴使用處置,因爲你不能保證它很快就會發生。您可以放心,直到完成使用後纔會處理它(即在範圍內的對象內不存在對它的引用)

+3

不要混淆處置(按需求釋放託管資源或無用資源),終結(釋放未處理的非託管資源)和垃圾收集(釋放內存)。 Finalize被垃圾收集器調用,除非加載,Dispose從不被垃圾收集器調用。 – 2012-07-23 21:34:19

相關問題