Потеря памяти при закрытии формы в Net Compact Framework
От: shekli  
Дата: 18.06.05 15:52
Оценка:
Здравствуйте люди!
Создал в дисигнере форму, потом из другой формы вызываю ее модально:
private void buttonCorrect_Click(object sender, System.EventArgs e)
{
this.AssemblyTables();
CorrectionForm myForm = null;
try
{
myForm = new CorrectionForm();

myForm.CommonZakaz = this.CommonZakaz;
wr = new WeakReference(myForm);
myForm.ShowDialog();
}
finally
{
if(myForm!=null)
{
myForm.Dispose();
myForm = null;
}
}


GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();


this.DisassemblyTable();
}

Показываю myForm.ShowDialog();
Диспозирую myForm.Dispose();
Обнуляю указатель myForm = null;

Вот код метода myForm.Dispose();
protected override void Dispose( bool disposing )
{
try
{
this.dataGridTovar.DataSource = null;
this.dataGridTovar.Dispose();
this.hScrollBar1.Dispose();
this.labelCena.Dispose();
this.labelParent.Dispose();
this.myCalcControl.Dispose();
this.myOstCommand.Dispose();
this.myTable.Clear();
this.ParentCommand.Dispose();
this.ParentCommand = null;
this.textBoxNumeric.Dispose();
this.toolBar1.Dispose();
this.buttonEd.Dispose();
this.buttonUpak.Dispose();
this.imageList1.Images.Clear();
}
catch
{
}
this.imageList1 = null;
this.CommonZakaz = null;


base.Dispose( disposing );


//GC.WaitForPendingFinalizers();

}

Вообщем пытаюсь обнулить и почистить все что есть в форме

И после всего этого сборщик мусора не хочет удалять форму из памяти! Память постоянно тает после каждого
вызова формы.

Для интереса добавил обработчик внешнего события выше указанную (удаляемую ) форму. Каждая удаленная форма откликается на это событие, хотя слабая ссылка показывает что объект формы удален!

private void button1_Click(object sender, System.EventArgs e)
{
CorrectionForm myForm = (CorrectionForm)wr.Target;
if(myForm == null)
{
MessageBox.Show("Объект все еще не удален!");
}
else
{
MessageBox.Show("Объект удален!");
}
MessageBox.Show(GC.GetTotalMemory(false).ToString());
}



MessageBox.Show(GC.GetTotalMemory(false).ToString());
тоже показывает что размер кучи растет

Вообщем не представляю как избавиться от черезмерной прожорливости программы, помогите пожалуйста!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.