Я знаю, что наилучшей практикой является вызов Dispose на любом объекте, который реализует IDisposable, особенно объекты, которые обертывают конечные ресурсы, такие как дескрипторы файлов, сокеты, дескрипторы GDI и т.д.
Но я столкнулся с тем случаем, когда у меня есть объект, у которого есть Font, и мне нужно было бы вскрыть IDisposable через несколько слоев объектов и просмотреть множество обычаев, чтобы я всегда получал шрифт, И мне интересно, стоит ли этого сложности.
Было бы одно, если Font завернул HFONT, потому что ресурсы GDI являются системно-глобальными. Но Font не переносит дескриптор GDI; он GDI +, который является полностью отдельной системой, и, насколько я понимаю, является локальным процессом, а не системно-глобальным, как GDI. И в отличие от Image, Font никогда не держит ресурсы файловой системы (что я знаю, во всяком случае).
Итак, мой вопрос: какова реальная стоимость предоставления Шрифту сбора мусора?
Я знаю, что я сделал бы небольшой удар для финализатора, но если количество "просочившихся" шрифтов невелико (скажем, полдюжины), то это честно не будет заметно. Помимо финализатора, это не сильно отличается от выделения массива среднего размера и позволяет GC очистить его - это просто память.
Есть ли издержки, о которых я не знаю, позволяя Font получить GCed?