Из документации Microsoft я узнал, что "основное" использование интерфейса IDisposable
- очистка неуправляемых ресурсов.
Для меня "неуправляемый" означает такие вещи, как соединения с базой данных, сокеты, дескрипторы окон и т.д. Но я видел код, в котором реализован метод Dispose()
для освобождения управляемых ресурсов, что мне кажется избыточным, поскольку сборщик мусора должен позаботься об этом за тебя.
Например:
public class MyCollection : IDisposable
{
private List<String> _theList = new List<String>();
private Dictionary<String, Point> _theDict = new Dictionary<String, Point>();
// Die, clear it up! (free unmanaged resources)
public void Dispose()
{
_theList.clear();
_theDict.clear();
_theList = null;
_theDict = null;
}
У меня такой вопрос: делает ли сборщик мусора свободной памятью, используемой MyCollection
, быстрее, чем обычно?
edit: Пока что люди опубликовали несколько хороших примеров использования IDisposable для очистки неуправляемых ресурсов, таких как соединения с базой данных и растровые изображения. Но предположим, что _theList
в приведенном выше коде содержит миллион строк, и вы хотели освободить эту память сейчас, а не ждать сборщика мусора. Будет ли приведенный выше код выполнить это?