关于C#内存释放的BUG?

using System;
class MyData
{
    public int[] dat;
    public MyData(int size)
    {
        dat = new int[size];
        Console.WriteLine($"构造");

    }

    ~MyData()
    {
        Console.WriteLine($"析构");
    }
}

class MyGCCollectClass
{
    static MyData theData;
    static void Main()
    {
        //测试1
        MyGCCollectClass.MakeSomeGarbage1();

        //测试2
        //MyGCCollectClass.MakeSomeGarbage2();
        //theData = null;

        //测试3
        //var vt = new MyData(1024 * 1024 * 1024);
        //vt = null;

        //测试4
        //theData = new MyData(1024 * 1024);
        //theData = null;

        Console.WriteLine("Memory used before collection:       {0:N0}", GC.GetTotalMemory(false));

        GC.Collect(); 

        Console.WriteLine("Memory used after full collection:   {0:N0}", GC.GetTotalMemory(true));

        /*** 测试结果
         * 成功回收:测试1,测试2
         * 不能回收:测试3,测试4
         */
        Console.Read();
    }

    static void MakeSomeGarbage1()
    {
        theData = new MyData(1024*1024);
        theData = null;
    }

    static void MakeSomeGarbage2()
    {
        theData = new MyData(1024 * 1024);
    }
}
原文地址:https://www.cnblogs.com/timeObjserver/p/14123788.html