我试图理解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());
}
}
}