Возможно, память не освобождается из-за какого-то другого фрагмента кода.Поскольку вы не предоставили много подробностей, сейчас я предположу, что все остальное оптимально.
Объекты, с которыми вы работаете, собираются сборщиком мусора (как вы это знаете).Но они не могут быть освобождены из памяти, когда вы этого хотите.Объекты .NET лучше оставить сборщику мусора.
По причине того, что память может не освобождаться, у вас есть ответы здесь.
Установка ссылки на объект на нольне имеет большого значения.С другой стороны, я лично несколько раз записывал, что объекты возвращаются живыми (и переносятся к старым поколениям), потому что вы используете их, устанавливая ноль в то же самое.Это еще одна форма вмешательства в GC, но ваш выбор.
Возможно, вам не нужно реализовывать IDisposable
, но если вы работаете с потоками, дескрипторами ОС, неуправляемыми ресурсами, вам следует.
Редактировать:
Использование памяти может быть высоким, но GC несет ответственность за его освобождение до тех пор, пока вы не сохраните ссылки.Итак, если вы приняли все меры предосторожности, может показаться, что ваше приложение потребляет много памяти.Это приемлемо, поскольку освобождение объектов, на которые нет ссылок, является обязанностью сборщика мусора.