Делается ли это правильно с точки зрения производительности и утечки памяти или это лучший способ?

Хорошо, у меня есть кнопка, лежащая в верхней части winform, в конструкторе формы у меня есть Graphics 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(new Pen(this.BackColor, 2.0f), this.MdPlayerButton.Location.X - 2, this.MdPlayerButton.Location.Y - 2, this.MdPlayerButton.Size.Width + 4, this.MdPlayerButton.Size .Высота + 4);

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

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

Благодарю вас !


person George S    schedule 22.02.2012    source источник


Ответы (1)


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

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

using (var pen = new Pen(...))
   DrawRectangle(pen, ...);
person Roman Starkov    schedule 22.02.2012