Ответ 1
Clear не удаляет элементы управления, что приводит к утечке памяти. По ссылке:
Вызов метода Clear не удаляет ручки управления из памяти. Вы должны явно вызвать метод Dispose, чтобы избежать утечек памяти.
Так как удаление внутри цикла помешает индексированию, вы можете либо скопировать коллекцию управления в другой список и выполнить цикл ForEach
на них, либо использовать обратный цикл For
.
for (int i = myTableLayoutPanelControls.Count - 1; i >= 0; --i)
myTableLayoutPanelControls[i].Dispose();
Вызов Dispose
приведет к удалению элементов управления из памяти (когда GC берет его). Это также будет обрабатывать вызов дочернего элемента управления Dispose
.
Один улов, если у вас есть настраиваемый элемент управления, который реализует IDisposable
, или вы переопределяете метод Dispose
, не вызывая метод base
. В методе Dispose
объекта вам необходимо убедиться, что вы отменили подписку на любые события за пределами вашей области. Если вы этого не сделаете, эта ссылка сохранит ваш объект.