Введение в управляемую память в C#
Объект класса в C# обычно создают через
new, а в переменной хранят
ссылку на этот объект, а не копию
самих данных.
Память под такие объекты выделяет управляемая куча. Программист не возвращает каждый блок этой памяти системе вручную, как при работе с кучей в C++. Сборщик мусора находит объекты, до которых больше нельзя добраться из работающего кода, и освобождает занятое ими место.
Так снижается риск забыть освободить память
в одной из веток if или перед ранним
return: пока на объект есть путь
по ссылкам, он остается в куче.
У объектов есть и другая сторона. Кроме байтов в управляемой куче они могут удерживать внешние ресурсы - открытые файлы, сетевые соединения, дескрипторы операционной системы. Сборщик освобождает память объекта-обертки, но не гарантирует, что связанный ресурс закроется в тот момент, когда программа уже закончила с ним работу. Поэтому управление памятью и управление такими ресурсами в C# - две разные задачи.