Нужно ли использовать шаблон для шрифта, кисти и т. Д. - PullRequest
1 голос
/ 28 декабря 2010

При программировании с помощью GDI + мне нужно придерживаться использования шаблона для всех видов объектов, таких как Brush, Font, это может сделать код очень загроможденным.

Есть предложения?

Ответы [ 4 ]

6 голосов
/ 28 декабря 2010

Да, вы должны сделать это для всех (IDisposable) объектов, которые вы создаете.

Исключениями являются стандартные объекты (Brushes.Blue, Pens.Black, e.Graphics, ...), поскольку вы их не создаете.

это может сделать код очень загроможденным.

using не так загроможден, как полная попытка / наконец. Обратите внимание, что вы можете сэкономить на вложенности:

using (Pen p = ...)
using (Brush b = ...)
{
   // draw with p and b
}

Но если выбор между загроможденным кодом или возможностью сбоя программы, есть ли выбор?

3 голосов
/ 28 декабря 2010

Да, вы должны . Эти объекты могут содержать неуправляемые ресурсы (например, дескрипторы GDI +), которые необходимо правильно утилизировать. Таким образом, либо используйте блок using, либо заключите все в оператор try / finally, где в блоке finally вы вызываете IDisposable.Dipose.

Пожалуйста, посмотрите эти предыдущие ответы по этой теме:

Что произойдет, если я не позвоню Dispose

Упаковка MemoryStream в using

2 голосов
/ 28 декабря 2010

Если вы создали кисть, используя новую, вы должны утилизировать ее.

Если вы приобрели кисть из коллекции кистей, не утилизируйте ее.См. Примечания в разделе http://msdn.microsoft.com/en-us/library/system.drawing.brushes.aspx для получения дополнительной информации.

То же самое относится и к шрифтам, если вы создали его с новым, избавьтесь от него.Если вы получили это от чего-то другого, посмотрите документацию, чтобы узнать, должны ли вы распоряжаться, если это или нет.

1 голос
/ 28 декабря 2010

Да, вы должны.

Альтернативой является использование кистей и шрифтов по умолчанию, например Brushes.Black, ...

...