Я изучаю различные способы выделения и освобождения памяти в 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 МБ увеличивается после завершения обоих процессов. Изначально приложение имело 4,6 Мб. после размещения он достиг 13,3 Мб, что и ожидалось. Но после освобождения этого места приложение в целом использовало 7,1 Мб. Что именно здесь происходит? И как я могу освободить это оставшееся место.