GC是否正常工作?

时间:2013-01-26 21:11:08

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

  

可能重复:
  .NET garbage collection not working properly here?

我测试了以下代码。 单击按钮时,将创建对象并将其添加到列表中。当单击另一个按钮时,列表将被清除

GC正在销毁对象,但内存使用量不会减少。 为什么?有什么不对?

public partial class MainWindow : Window
{
    public List<MyModel> MyList;
    public MainWindow()
    {
        MyList = new List<MyModel>();
        InitializeComponent();
    }

    private void button1_Click_1(object sender, RoutedEventArgs e)
    {
        MyList = new List<MyModel>();
        for (int i = 0; i < 1000000; i++)
        {
            MyList.Add(new MyModel { ID = i, Description = "Model Id : " + i.ToString() });
        }
        MessageBox.Show("Complate!");
    }

    private void button1_Click_2(object sender, RoutedEventArgs e)
    {
        MyList.Clear();
        MyList = null;
    }
}

public class MyModel
{
    ~MyModel()
    {
        Console.WriteLine(Description);
    }
    public int ID { get; set; }
    public string Description { get; set; }
}

2 个答案:

答案 0 :(得分:14)

假设您拥有一个仓库。您将箱子存放在仓库中。有些盒子是垃圾,所以你要定期扔掉它们。 仓库的面积不会变小。

如果您测量的是提交给流程的内存页面总数,那么您不是在测量仓库中的方框数量,而是在测量仓库的平方英尺。

答案 1 :(得分:0)

.Net垃圾收集器仅在内存压力下运行。在许多程序的正常操作中,只要你有足够的RAM,在你退出程序之前,内存使用量会不断增加。您可以明确要求它执行GC,但这仍然只是一个建议。