C
Chris Mayers
I am trying to track a suspected memory leak in an application I'm writing
and through repeated simplification of my project, I have found the
following which is quite easily replicated should you be prepared to give
me
5 minutes of your time...
Create a new C# (Probably the same in VB dotNET but I've not tried it)
Windows application with 2 forms, the default form -Form1 and one other
one.
that has a bunch of controls on it (say 20 buttons, 20 labels and a
DataGrid) - Form2.
On the default form, add a button to display the second form with some code
like:
private void button1_Click(object sender, System.EventArgs e)
{
using (form2 formTwo = new form2())
{
form2.ShowDialog();
}
}
also on Form1 add a label, and a timer that updates the label text as
follows (updates every 5 seconds -Interval = 5000-):
private void timer1_Tick(object sender, System.EventArgs e)
{
label1.Text = GC.GetTotalMemory(False);
}
and finally a button that forces a Garbage Collection:
private button2_Click(object sender, System.EventArgs e)
{
GC.Collect();
}
OK, my question/query is this, if I repeatedly click the button to open the
second form, then close the second form, click the button, close the form
etc. about 20-30 times, the display of GetTotalMemory seems to keep going
up, and even after forcing Garbage Collections, never seems to get fully
reclaimed. Should I care? and if I should, what (if anything) can I do
about
it?
I would really appreciate an answer from someone who understands these
things...
Thanks a lot,
Chris.
and through repeated simplification of my project, I have found the
following which is quite easily replicated should you be prepared to give
me
5 minutes of your time...
Create a new C# (Probably the same in VB dotNET but I've not tried it)
Windows application with 2 forms, the default form -Form1 and one other
one.
that has a bunch of controls on it (say 20 buttons, 20 labels and a
DataGrid) - Form2.
On the default form, add a button to display the second form with some code
like:
private void button1_Click(object sender, System.EventArgs e)
{
using (form2 formTwo = new form2())
{
form2.ShowDialog();
}
}
also on Form1 add a label, and a timer that updates the label text as
follows (updates every 5 seconds -Interval = 5000-):
private void timer1_Tick(object sender, System.EventArgs e)
{
label1.Text = GC.GetTotalMemory(False);
}
and finally a button that forces a Garbage Collection:
private button2_Click(object sender, System.EventArgs e)
{
GC.Collect();
}
OK, my question/query is this, if I repeatedly click the button to open the
second form, then close the second form, click the button, close the form
etc. about 20-30 times, the display of GetTotalMemory seems to keep going
up, and even after forcing Garbage Collections, never seems to get fully
reclaimed. Should I care? and if I should, what (if anything) can I do
about
it?
I would really appreciate an answer from someone who understands these
things...
Thanks a lot,
Chris.