Marshal.FreeHGlobal如何释放分配的内存?

时间:2019-07-09 11:21:22

标签: c# memory-management marshalling

我正在学习使用C#分配和释放内存的不同方法。这是有效的示例代码。

   class clsA
   {
       private IntPtr _buffer;
       public clsA()
       {
            _buffer = Marshal.AllocHGlobal(1024);
            //_buffer = Marshal.AllocCoTaskMem(1024);
       }
       public void free()
       {
           Marshal.FreeHGlobal(_buffer);
          //Marshal.FreeCoTaskMem(_buffer);
       }    
    }


   class Program
   {


      static void Main(string[] args)
      {

       unsafe
       {
            List<clsA> l = new List<clsA>();
            for(int i = 0; i < 8192; i++)
            {
                l.Add(new clsA());


            }
            Console.WriteLine("Added");
            foreach (var a in l)
            {
                a.free();
            }

            Console.ReadLine();
        }


       }
   }

内存分配按预期工作,但是在完成两个过程之后,取消分配后1-2 mb似乎会增加。最初,该应用具有4.6 Mb。分配后达到了预期的13.3 Mb。但是释放空间后,整个应用程序使用的是7.1 Mb。这到底是怎么回事?以及如何释放剩余空间。

0 个答案:

没有答案