IDisposable - одно из главных средств программирования для утечек памяти .Net. Хотя документация предполагает, что его следует использовать для внешних ресурсов, я широко использую IDisposable для освобождения внутренних ресурсов, таких как указатели на родительские классы.
Довольно легко продемонстрировать требование, создав два взаимно-ссылочных класса, то есть foo и bar. foo относится к бару и наоборот. Когда foo выходит из области видимости, GC видит, что bar все еще ссылается на нее, поэтому она не собирается (и наоборот). Память не собирается.
Это тот же стиль проблемы, который проявляется в EventHandlers, когда ссылка не освобождается, когда форма закрыта, если она явно не освобождена или не реализована модель WeakEvent.
Я бы предположил, что наилучшей практикой является использование модели программирования C ++, в которой вы очищаете после себя, используя Dispose , если только вы не уверены, что GC может решить эту проблему за вас.