Я попробовал простой эксперимент, чтобы проверить функциональность сборщика мусора. Ссылка на 3.9 Автоматическое управление памятью (MSDN) об автоматическом управлении памятью в .NET. Для меня это звучало как эквивалент общего указателя на С++. Если контрольный счетчик объекта становится нулевым, он будет освобожден сборщиком мусора.
Поэтому я попытался создать функцию внутри своей основной формы. Функция была вызвана внутри функции события Shown моей основной формы, которая выполняется после конструктора. Вот экспериментальный код.
public void experiment()
{
int[] a = new int[100000];
int[] b = new int[100000];
int[] c = new int[100000];
int[] d = new int[100000];
a = null;
b = null;
c = null;
d = null;
}
И вот результаты:
До выделения памяти
После выделения памяти
Перед тем, как покинуть область действия
После выхода из области действия
Почему сборщик мусора не освободил память, выделенную массивами a, b, c, d, даже после того, как был установлен на нуль?