-4

重複の可能性:
.NET ガベージ コレクションがここで正しく機能していませんか?

次のコードをテストしました。ボタンをクリックすると、オブジェクトが作成され、リストに追加されます。別のボタンをクリックすると、リストがクリアされます

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; }
}
4

2 に答える 2

14

倉庫を所有しているとします。ボックスを倉庫に保管します。箱の中にはゴミになっているものもあるので、定期的に捨てます。倉庫の面積は小さくなりません。

測定しているのがプロセスにコミットされたメモリ ページの総数である場合、倉庫内の箱の数を測定しているのではなく、倉庫の面積を測定しています。

于 2013-01-26T21:52:10.647 に答える
0

.Net ガベージ コレクターは、メモリ不足の場合にのみ実行されます。多くのプログラムの通常の操作では、十分な RAM があれば、プログラムを終了するまでメモリ使用量は増加し続けます。GC を実行するように明示的に要求できますが、それは単なる提案にすぎません。

于 2013-01-26T21:15:08.097 に答える