Правильно написанный объект не должен вызывать утечку памяти, если его метод Dispose
не вызывается. В наши дни объект .Net, управляющий неуправляемыми ресурсами, должен делать это через экземпляр SafeHandle . Это обеспечит освобождение собственной памяти, даже если Dispose
не вызывается.
Однако объекты, которые написаны неправильно, могут вызвать утечку памяти, если не вызывается Dispose
. Я видел много примеров таких объектов.
В целом, если вы используете экземпляр IDisposable
, которым вы владеете, вы всегда должны вызывать Dispose
. Даже если объект написан правильно, в вашу пользу неуправляемые ресурсы будут очищаться раньше, а не позже.
EDIT
Как отметил Джеймс в комментариях, есть один случай, когда не вызов Dispose
может вызвать утечку памяти. Некоторые объекты используют обратный вызов Dispose
для отсоединения от долгоживущих событий, которые, если они останутся подключенными, приведут к тому, что объект окажется в памяти и станет утечкой. Еще одна причина всегда звонить Dispose