Руководство по использованию кистей и ручек - PullRequest
7 голосов
/ 07 января 2009

Сколько стоит создавать кисти и ручки gdi? Должен ли я создавать их по мере необходимости и оборачивать их так, чтобы они быстро располагались, или создавать статический класс, аналогичный классу System.Drawing.Brushes?

Ответы [ 3 ]

5 голосов
/ 07 января 2009

IMO, они достаточно эффективны, так что вы обычно не должны создавать долгоживущие экземпляры, которые используются в нескольких вызовах методов, но достаточно неэффективны, чтобы создавать каждый из них только один раз в конкретном методе вместо создания нового каждый раз, когда вам нужно что-то нарисовать.

Другими словами, не храните пользовательскую кисть в своем классе, которую вы используете для рисования текста при каждом вызове OnPaint, но также не создавайте новую кисть для каждой строки текста, которую вы рисуете в этой OnPaint. звоните, либо.

2 голосов
/ 07 января 2009

Я сталкивался с исключениями при попытке пользовательского рисования изображений в веб-приложении под нагрузкой статической кистью.

Я не знаю технических причин, но я думаю, что кисти и ручки не являются поточно-ориентированными, поэтому я бы создал их по мере необходимости в поточно-ориентированном виде и избавился бы от них в этой области, вероятно, с используя .

1 голос
/ 07 января 2009

Для нашего настраиваемого графического интерфейса мы решили, что просто попробуем поместить их в «использование» (пересоздать при необходимости) при рисовании наших элементов управления, и решили, что при необходимости оптимизируем.

Это не требуется.

Это WinForm на WinCE, который обычно означает, что он хорошо показывает вещи, которые могут быть немного медленными на рабочем столе (например, отражение ощущается намного дороже на WinCE), поэтому, если вы не выполняете какие-то безумные манипуляции с изображениями на рабочем столе, которые требуют mucho тогда я думаю, что вы должны создавать их по мере необходимости.

IIRC с использованием кистей. сбор в GDI может быть вариантом, так как это гарантирует, что они будут кэшированы и удалены в конце, хотя я не уверен в безопасности потоков там.

...