Как предотвратить утечку памяти из объекта SolidColorBrush?
Нет никакой возможности утилизировать SolidColorBrush.
Как предотвратить утечку памяти из объекта SolidColorBrush?
Я даже не могу использовать "использование", так как SolidColorBrush не реализует интерфейс IDisposable.
1 ответ
Решение
Не создавай новый SolidColorBrush
экземпляров.
Используйте предопределенные кисти в System.Windows.Media.Brushes
,
В противном случае создайте один экземпляр и используйте его повторно.
Вот мой опыт.
Если я использую приведенный ниже код, при его запуске несколько сотен тысяч раз возникает огромная утечка памяти.
SolidColorBrush brush = new SolidColorBrush( helper.ConvertValueToColorCanvas(colorValue, slider.Value));
mainCanvas.rects.Add(new MyCanvas.MyRect() { Brush = brush, Rect = new Rect(p0X + leftMargin + width, p0Y + height, (p2X - p0X), (p2Y - p0Y)) });
Но если я использую код ниже, утечка частично прекратится.
mainCanvas.rects.Add(new MyCanvas.MyRect() { Brush = new SolidColorBrush( helper.ConvertValueToColorCanvas(colorValue, slider.Value)), Rect = new Rect(p0X + leftMargin + width, p0Y + height, (p2X - p0X), (p2Y - p0Y)) });
Так что вместо создания новой переменной solidbrush, если вы используете ее непосредственно в конструкторе, у меня это сработало.