Все, что имеет Dispose, вы хотите вызвать Dispose, когда вы закончите.В идеале вы должны инкапсулировать эти объекты в операторы using
.Оператор using вызовет Dispose для вас, когда объект выпадает из области видимости.
http://msdn.microsoft.com/en-us/library/htd05whh.aspx
Если кратко взглянуть на код, проблема, с которой вы столкнулись, заключается в том, что если в ваших методах есть исключениеброшен, объекты не будут вызывать метод Disposed.Вы должны как минимум обернуть свой код в блок try / catch / finally и поместить метод dispose в блок finally (лучше использовать оператор using).
Финализаторы используются в ваших объектах, чтобы убедиться, что когдаони уничтожены, ничего случайно не осталось открытым (как файл).Если все, что вы делаете, - это создание объектов внутри методов (без переменных уровня класса, от которых вам нужно избавиться), то вам не нужно реализовывать Finalizer.Вы никогда не захотите реализовать пользовательский финализатор, если в этом нет необходимости, потому что это заставляет GC выполнять дополнительную работу (переводит объект на следующий уровень GC и не уничтожает его немедленно).Судя по тому, что вы написали, похоже, вам это не нужно.