Из чтения документации 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
в приведенном выше коде содержит миллион строк, и вы хотели освободить эту память сейчас , а не ждать сборщика мусора. Будет ли код, приведенный выше, выполнить это?