我正在打破我的头脑,但我仍然得到解决方案。我运行这些代码并使用.NET内存分析器进行分析。它告诉我没有收集IntEntity []的一个实例。但我正在清除列表并将其设置为null。我怎么能把这个垃圾收集?我在这里做错了吗?
编辑:我尝试设置b = null&调用GC.Collect(GC.MaxGeneration);但结果相同。
Edit2:从NET Memory Profiler& amp; ANTS内存分析器
请帮帮我。
以下是我正在使用的代码,
public class IntEntity
{
public int Value { get; set; }
}
public abstract class Base
{
protected List<IntEntity> numbers;
public Base()
{
}
public abstract void Populate();
public int Sum()
{
numbers = new List<IntEntity>();
Populate();
int sum = 0;
foreach (IntEntity number in numbers)
{
sum += number.Value;
}
numbers.Clear();
numbers = null;
return sum;
}
}
public class Child : Base
{
public override void Populate()
{
numbers.Add(new IntEntity() { Value = 10 });
numbers.Add(new IntEntity() { Value = 20 });
numbers.Add(new IntEntity() { Value = 30 });
numbers.Add(new IntEntity() { Value = 40 });
}
}
Base b = new Child();
MessageBox.Show(b.Sum().ToString());
b = null;
GC.Collect(GC.MaxGeneration);
答案 0 :(得分:1)
正如Jim Mische和Steven Sudit指出的那样,GC可能根本就没有收集,因为运行时可用的RAM大于程序所需的内存量
您可以在将数字设置为null后添加GC.Collect(),它可能会从您的个人资料中消失。
您应该注意,通常您只应引导垃圾收集用于测试目的。