This seems to be a bug in the .net framework 2.0 introduced with SP1 and still there in SP2.
Just read the following blog post SciTech software, makers of .net Memory Profiler:
http://www.scitech.se/blog/index.php/2008/03/20/minor-memory-leak-introduced-in-net-framework-20-sp1/
To fix the problem add the following code to your MDI parent form:
protected override void OnMdiChildActivate(EventArgs e)
{
// Code from http://www.scitech.se/blog/index.php/2008/03/20/minor-memory-leak-introduced-in-net-framework-20-sp1/
base.OnMdiChildActivate(e);
try
{
typeof(Form).InvokeMember("FormerlyActiveMdiChild",
BindingFlags.Instance | BindingFlags.SetProperty |
BindingFlags.NonPublic, null,
this, new object[] { null });
}
catch (Exception)
{
// Something went wrong. Maybe we don't have enough
// permissions to perform this or the
// "FormerlyActiveMdiChild" property no longer
// exists.
}
}
I tested this with ANTS Memory Profiler and it fixed the issue in my case.