Сегодня я столкнулся с некоторой дилеммой. Я создал приложение, которое использует GDI + для рисования на форме. Розыгрыш запускается таймером каждую секунду. Метод draw использует цикл for для перебора коллекции объектов и, если они находятся в определенном состоянии, рисует их.
Я хочу нарисовать их с помощью LinearGradientBrush просто потому, что это выглядит намного приятнее, чем простая кисть. Посмотрите на следующее
//minutes
foreach (Led l in MinuteGrid.Leds)
{
LinearGradientBrush b = new LinearGradientBrush
(l.LedRectangle, Color.GreenYellow, Color.Green, 110);
if (l.IsLit)
g.FillRectangle(b, l.LedRectangle);
b.Dispose();
}
Я создаю новый LinearGradientBrush для каждой итерации цикла (что меня беспокоит), но это потому, что я должен. Я не могу создать один вне цикла, потому что его конструктор требует, чтобы я установил параметры, которые только когда-либо известны внутри цикла.
Я считаю, что использование метода dispose для объекта LinearGradientBrush не так уж и надежно. Если я запускаю свое приложение и просматриваю его в диспетчере задач, его извергается память. Когда я тогда добавляю строку b = null, которая, кажется, очень помогает, как показано ниже
foreach (Led l in MinuteGrid.Leds)
{
LinearGradientBrush b = new LinearGradientBrush
(l.LedRectangle, Color.GreenYellow, Color.Green, 110);
if (l.IsLit)
g.FillRectangle(b, l.LedRectangle);
if (b != null)
{
b.Dispose();
b = null;
}
}
Мне просто интересно, есть ли лучший способ работы с LinearGradientBrushes? Или есть лучшее решение для использования?
Большое спасибо