db
будет присутствовать до тех пор, пока не выйдет из области видимости, все ссылки на него не будут потеряны, и GC решит подключиться. Вызов Dispose
не очищает сам объект , он сообщает объект для очистки любых собственных ресурсов, на которых он держится.
Интерфейс IDisposable
предназначен для управления собственными ресурсами, которыми GC не может управлять. Сам объект является управляемым объектом, о котором заботится GC. В вашем примере этот объект, вероятно, поддерживает соединение с базой данных, которая является собственным ресурсом.
GC не может очистить это, поэтому для детерминированного управления этой памятью / ресурсом класс реализует IDisposable
, чтобы сказать клиентам: «эй, вам нужно проделать дополнительную работу, чтобы убедиться, что ресурсы, которые мне нужны, о моей работе заботятся настолько эффективно, насколько это возможно. "
Кстати, правильная реализация IDisposable
высвободит все собственные ресурсы в финализаторе, поэтому вы не должны испытывать утечку памяти, если не вызовете Dispose
. Тем не менее, это не является детерминированным, и вы можете очень хорошо испытывать проблемы при этом. Хорошая практика требует, чтобы вы освободили эти ресурсы как можно скорее, поэтому вы сами звоните Dispose
.