Soy consciente de que la mejor práctica es llamar a Dispose en cualquier objeto que implementa IDisposable, especialmente objetos que se colocan los recursos finitos como identificadores de archivos, sockets, GDI trata, etc.¿Qué tan importante es deshacerse de una fuente realmente?
Pero estoy corriendo en un caso donde tengo un objeto que tiene una fuente, y tendría que aplomar IDisposable a través de varias capas de objetos, y revisar muchos usos, para asegurarme de que siempre obtenga la fuente eliminada. Y me pregunto si vale la pena la complejidad.
Sería una cosa si Font envolviera un HFONT, porque los recursos de GDI son system-global. Pero Font no ajusta un controlador GDI; es GDI +, que es un sistema completamente separado, y por lo que yo entiendo, es un proceso local, no un sistema global como GDI. Y a diferencia de Image, Font no se aferra a los recursos del sistema de archivos (que yo sepa, de todos modos).
Entonces mi pregunta es: ¿Cuál es el costo real de dejar que Font obtenga basura recolectada?
Sé que haría un pequeño golpe para el finalizador, pero si el número de fuentes "filtradas" es pequeño (digamos media docena), ese golpe honestamente no sería notable. Además del finalizador, esto no parece muy diferente de asignar una matriz de tamaño medio y dejar que el GC lo limpie; es solo memoria.
¿Hay costos que no conozco para permitir que una fuente obtenga GCed?
"A menudo, los controladores no administrados son más restringidos que la memoria" - Claro. ¿Pero eso es cierto para los identificadores de fuente GDI + específicamente? Esa es parte de mi pregunta. –