Dot-Net

配置字型有多重要,真的嗎?

  • February 20, 2013

我知道最好的做法是在任何實現 IDisposable 的對像上呼叫 Dispose,尤其是包裝有限資源(如文件句柄、套接字、GDI 句柄等)的對象。

但是我遇到了一個情況,我有一個有字型的對象,我必須通過幾層對象來探測 IDisposable,並查看很多用法,以確保我總是處理字型。我想知道它是否值得複雜。

如果 Font 包裝了 HFONT,那將是一回事,因為 GDI 資源是系統全域的。但是 Font 不包裝 GDI 句柄;它是 GDI+,它是一個完全獨立的系統,據我所知,它是本地程序,而不是像 GDI 那樣的系統全域。與 Image 不同,Font 永遠不會佔用文件系統資源(無論如何我都知道)。

所以我的問題是:讓字型收集垃圾的真正成本是多少?

我知道我會對終結者造成一點打擊,但如果“洩漏”字型的數量很少(比如六個),那麼老實說,這種打擊不會引起注意。除了終結器之外,這似乎與分配一個中等大小的數組並讓 GC 清理它沒有太大區別——它只是記憶體。

讓字型獲得 GCed 是否有我不知道的成本?

簡單的回答:如果只是幾個,那麼沒有。如果它很多,那麼是的。如果您的應用程序已經對垃圾收集器施加壓力,那麼可以。我會使用 perfmon 查看周圍的對像數量,以及提升到更高代的數量,然後再決定。

問題是垃圾收集僅在記憶體壓力存在時發生。通常,非託管句柄比記憶體更受限制,因此您可能會在 GC 發生之前用完句柄,從而導致錯誤。

但是對於一兩個Font實例,它不會過度傷害你。

一個更大的問題是一些對像是共享的,不應該(或不能)過早地處置……

引用自:https://stackoverflow.com/questions/752344