为什么这个C#代码注释泄漏?

时间:2017-07-11 12:17:02

标签: c# .net memory-leaks garbage-collection

我试图理解C#垃圾收集,并希望通过使用静态根字段来模拟内存泄漏。 GC不能很好地执行(这很好),但是会收集对象。在下面的例子中,为什么内存不会泄漏?字段 Counter 是否应该阻止收集MemLeakRoot类的实例?

这应该是一个泄漏的课程:

public class MemLeakRoot
{
    public static int Counter;

    public List<byte[]> MyList;

    public MemLeakRoot() { }

    public void Do()
    {
        MyList = new List<byte[]>();
        for (int i = 0; i < 10000; i++)
        {
            MyList.Add(new byte[1024]);
        } 

        Counter++;
    }
}

这就是模拟:

static void Main(string[] args)
{
    while (true)
    {
        var obj = new MemLeakRoot();
        obj.Do();

        if (MemLeakRoot.Counter != 0 && MemLeakRoot.Counter % 1000 == 0)
        {
            Console.Write("+");
            if (MemLeakRoot.Counter % 100000 == 0) Console.WriteLine(MemLeakRoot.Counter.ToString());
        }
    }
}

0 个答案:

没有答案