我可能不明白这个概念,或者我做错了什么。我对 .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 等待释放托管内存?或者这是我的设计错误?