Делает ли это, является ли правильный путь с точки зрения производительности и утечек памяти или это лучший способ? - PullRequest
0 голосов
/ 22 февраля 2012

Хорошо, у меня есть кнопка, лежащая на вершине winform, в конструкторе формы у меня есть Графика obj = this.CreateGraphics();

при срабатывании события ввода мыши

MainFormGraphicsHandle.DrawRectangle( new Pen(Color.CornflowerBlue, 2.0f),
this.MdPlayerButton.Location.X - 2, this.MdPlayerButton.Location.Y - 2,
this.MdPlayerButton.Size.Width + 4, this.MdPlayerButton.Size.Height + 4);

при отпускании мыши

MainFormGraphicsHandle.DrawRectangle (новое перо (this.BackColor, 2.0f), this.MdPlayerButton.Location.X - 2, this.MdPlayerButton.Location.Y - 2, this.MdPlayerButton.Size.Width + 4, this.MdPlayerButton.Size.Height + 4);

Может ли рисование поверх прямоугольников над прямоугольниками привести к утечке памяти или к чему-либо, или это хорошая практика, чтобы выделять кнопки?

Я хочу иметь возможность изменить размер моей формы, поэтому использование готовых изображений и переключение между ними нежелательно.

Спасибо!

1 Ответ

1 голос
/ 22 февраля 2012

WinForms использует GDI для графики, а GDI - это то, что известно как немедленный режим .Это означает, что вы можете нарисовать один или миллиард прямоугольников;это займет только столько памяти, сколько потребуется для хранения полученного растрового изображения.

Для повышения эффективности вы можете вручную утилизировать созданное вами перо, но если этого не произойдет, .NET очистит ихв конечном итоге для вас:

using (var pen = new Pen(...))
   DrawRectangle(pen, ...);
...