Нужно создать пользовательский элемент.
Создаю:
public class MyControl : Control
{
...
}
Отрисовываю следующим образом как в доках:
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
...
}
В самом элементе отрисовывается анимация, рисуется объект через таймер и в каждой итерации изменяются координаты.
Суть вот в чем, если просто один раз отрисовать контрол, то с памятью все хорошо, смотрим в диспетчере задач - она не изменяется. Ресайзим форму - используемая память растет, это вроде как логично.
Но, если в цикл добавить
this.Invalidate();
То память начинает сразу расти после запуска приложения, потом правда останавливается на каком-то значении но все же.
Даже если писать
this.Invalidate(region);
Где region необходимый квадрат для перерисовки, ничего не изменяется, даже если поставить region с параметрами (0, 0, 1, 1), память растет. Более того, если просто оставить в цикле Invalidate при этом вообще ничего на форме не отрисовывать, память тоже растет. В цикле таймера нет никаких выделений памяти, убираю их таймера все кроме Invalidate память все равно растет сразу без ресайза окна.
Как быть? Требования такие что память не должна скакать.