Для некоторых из моих приложений winforms мне нужно создать целую кучу объектов GDI + (кисти, перья, шрифты и т. Д.) И использовать их снова и снова. Я создал кэширующий синглтон в гетто, чтобы выполнить то, что мне нужно, но запах кода ошеломляющий ...
public sealed class GraphicsPalette
{
public static readonly GraphicsPalette Instance = new GraphicsPalette();
static GraphicsPalette()
{
}
private Dictionary<Color, Brush> solidBrushes;
//multithreading
private object brushLock;
private GraphicsPalette()
{
solidBrushes = new Dictionary<Color, Brush>();
brushLock = new object();
}
public Brush GetSolidBrush(Color color, int alpha)
{
return GetSolidBrush(Color.FromArgb(alpha, color));
}
public Brush GetSolidBrush(Color color)
{
if (!solidBrushes.ContainsKey(color))
{
lock (brushLock)
{
if (!solidBrushes.ContainsKey(color))
{
Brush brush = new SolidBrush(color);
solidBrushes.Add(color, brush);
return brush;
}
}
}
return solidBrushes[color];
}
}
OnPaint ()
и т. Д.? Brush
, который, в свою очередь, освободит все неуправляемые объекты. ресурсы? Прошу прощения, если это повторение, но я не нашел подобных вопросов.