可我不明白conecept还是我做错事的时候。 我对.NET中的内存管理的一些问题。
想象一下这种情况:
Form1
是大块头形式,如MDI父和一点点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
occures。
为什么GC等待释放托管内存? 或者,这是我设计的错误呢?