内存泄漏并处置掉

Cod*_*ist 2 c# memory-leaks

我可能不理解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();

        }
    }
Run Code Online (Sandbox Code Playgroud)

现在,孩子正在分配一点内存作为模拟:

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;
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

现在,我正在使用内存分析器检查内存堆中的内容.我明白了,如果我点击按钮,就会分配内存.然后我关闭它FormChild并调用它Dispose().但内存仍然分配.如果我再次点击一个System.OutOfMemoryException发生.

为什么GC等待释放托管内存?或者这是我的设计错误?

Yau*_*aur 6

GC只释放内存以响应内存压力,Dispose的主要目的是清理非内存相关资源.

换句话说,对托管对象进行归零并不一定会使它们更快地被收集,但会使诊断内存问题更容易诊断.