У меня есть класс, где на основе определенного события I initialize
диалоговое окно с новой формой и initialize
. В этом диалоговом окне на основе формы есть другие элементы управления внутри него.Ошибка утечки памяти в приложении формы C#
Когда закрыт dialog
, я очищаю и удаляю все элементы управления, которые создаются в форме. К сожалению, кажется, что что-то не удаляется или остается в памяти даже после удаления.
Форма насос
class someClass
{
System.Timers.Timer someTimer;
public void CallToChildThread(Object stateInfo)
{
// check some event
// if true, fire event
}
someClass()
{
someTimer= new System.Threading.Timer(CallToChildThread,
autoEvent, 1000, 250);
_show += new EventHandler(eventCheck);
}
void eventCheck()
{
formClass formClassObject = new formClass(); //create form
formClassObject.someFunction(); // has some other function and does a showDialog on self
formClassObject.Dispose();
formClassObject = null;
}
}
Внутри объекта formClass, при получении события FormClosed, я распоряжаюсь от всех элементов управления и контроля в рамках управления внутри объекта, но есть еще заметная утечка памяти.
Форма класс
public partial class formClass
{
//Initialize a bunch of managed resources to null
someOtherForm form2;
someOtherForm form3;
//connect some events on child forms to buttons on this form object
this.form2.cancelButtonClicked += someFunction;
this.form3.cancelButtonClicked += someFunction;
// Form closed Event
private void formClass_FormClosed(object sender, FormClosedEventArgs e)
{
//set form2 and form3 visibility to false
// clear AND dispose all controls of form2
// clear AND dispose all controls of form3
//set form2 and form3 to null
// clear AND dispose off all controls of formClass
// Dispose this (formClass) object
}
}
Есть ли возможная проблема с тем, как я инициализирован объектами формы? Разве они не попадают?
Почему вы думаете, что есть утечка памяти? Обратите внимание, что сбор мусора решает сам _when_ фактически освободить память. Это происходит не обязательно сразу, но в конечном итоге может быть сделано, когда gc замечает, что памяти больше не хватает для выполнения следующего запроса на распределение. btw: если вы разместите форму, она сама выберет все свои элементы управления, не нужно делать это вручную. –
Какое поведение приводит вас к мысли, что есть утечка памяти? – tonythewest
Попробуйте утилизировать таймер, а также объект формы? –