c#内存泄漏分析

时间:2010-09-27 17:10:03

标签: c#

我正在打破我的头脑,但我仍然得到解决方案。我运行这些代码并使用.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);

alt text

alt text

1 个答案:

答案 0 :(得分:1)

正如Jim Mische和Steven Sudit指出的那样,GC可能根本就没有收集,因为运行时可用的RAM大于程序所需的内存量

您可以在将数字设置为null后添加GC.Collect(),它可能会从您的个人资料中消失。

您应该注意,通常您只应引导垃圾收集用于测试目的。