我可能不明白这个概念,或者我做错了什么。我对 .NET 中的内存管理有一些疑问。
想象一下情况:
Form1
是大人物 Form,作为 MDI-parent 和 a little FormChild
,被绑定为孩子:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void simpleButton1_Click(object sender, EventArgs e)
{
FormChild formChild = new FormChild();
formChild.MdiParent = this;
formChild.Show();
}
}
现在孩子正在分配一点内存作为模拟:
public partial class FormChild : Form
{
private readonly List<byte[]> _list = new List<byte[]>();
public FormChild()
{
InitializeComponent();
}
private void FormChild_Load(object sender, EventArgs e)
{
int i = 0;
while (i < 100)
{
_list.Add(new byte[1024 * 1024 * 10]);
i += 1;
}
}
}
现在,我正在使用内存分析器检查内存堆中发生了什么。我明白了,如果我点击按钮,内存就被分配了。然后我关闭FormChild
它,它会调用Dispose()
. 但是内存仍然被分配。如果我再次单击System.OutOfMemoryException
会发生。
为什么 GC 等待释放托管内存?或者这是我的设计错误?