Финализатор должен вызывать этот класс 'Dispose, передавая false для параметра распоряжения, а не непосредственно уничтожая объекты, которыми владеет этот класс. См. MSDN .
Редактировать: Таким образом, чтобы ответить на вопрос, удаление принадлежащих объектов должно быть выполнено в Dispose, а не Finalize.
Редактировать 2: Обратите внимание, это означает, что если объект завершается без удаления, тогда Dispose будет вызываться (с помощью Finalize) только с параметром "false", а дочерние объекты не будут распоряжаться этим классом. Это правильно, потому что они являются управляемыми объектами и будут завершены, когда инфраструктура будет чувствовать себя, как если бы она не была явно удалена.