Когда я помещаю этот код в небольшой консольный проект:
Console.WriteLine($"Mémoire avant allocation 1G: {GC.GetTotalMemory(false)}");
byte[] buf = new byte[1000000000];
Console.WriteLine($"Mémoire après allocation 1G: {GC.GetTotalMemory(false)}");
buf = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
Console.WriteLine($"Mémoire après libération 1G: {GC.GetTotalMemory(false)}");
, я получаю следующий результат (как и ожидалось):
Mémoire avant allocation 1G: 30028
Mémoire après allocation 1G: 1000038252
Mémoire après libération 1G: 29472
Теперь В том же коде большого приложения, над которым я работаю, я получаю следующий результат:
Mémoire avant allocation 1G: 153152496
Mémoire après allocation 1G: 1153152552
Mémoire après libération 1G: 1146813960
Как видите, GC.Collect
здесь ничего не делает.
Почему это?