Используйте предопределенные Кисти , если можете (и не утилизируйте их). Если вы не можете, я предлагаю не создавать свои кисти на каждой краске, а кэшировать их:
IDictionary<Color, Brush> SolidBrushes; //... cache
Brush GetSolidBrush(Color color) {
if(color.IsSystemColor)
return GetSystemBrush(color);
Brush result = null;
if(!SolidBrushes.TryGetValue(color, out result)) {
result = new SolidBrush(color);
SolidBrushes.Add(color, result);
}
return result;
}
Brush GetSystemBrush(Color color) {
return SystemBrushes.FromSystemColor(color);
}
ДОПОЛНЕНИЕ: лучший ответ на этот вопрос может быть «зависит от задачи». Создание кистей стоит дорого из-за самих кистей (это управляемая оболочка для неуправляемого объекта GDI +), а также из-за сборки мусора со всеми этими кистями в каждом событии Paint. Поэтому, если вы используете несколько кистей, их лучше кэшировать (конечно, кэшированные кисти следует утилизировать при утилизации контроля владельца или при смене кожи). Но если вы используете только одну кисть (в первом случае), кеш не нужен - используйте только кисть в блоке