Как предотвратить утечку памяти из объекта 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, если вы используете ее непосредственно в конструкторе, у меня это сработало.

Другие вопросы по тегам