Краткий ответ: сбор мусора становится менее эффективным, чем больше вы его делаете.
Ожидание ожидающих финализаторов также нежелательно.Вы задерживаете свой код для ожидания неизвестного числа объектов для выполнения операций очистки, которые могут занять неизвестное количество времени.Если вы исправите основную проблему, вам не нужно будет ждать ни одной из них.
Что касается основной проблемы, когда объекту принадлежит какой-то внешний (дефицитный) ресурс, важно, чтобы, когда выпокончив с этим, вы вызываете соответствующий метод для освобождения ресурса.Часто это метод с именем Dispose (), CloseConnection () или что-то подобное.
однако, это объект взаимодействия COM, и все MSDN говорит:
Чтобы закрыть соединение, вызовитефункцию Release (C ++) или установите для объекта значение Nothing (Visual Basic).
В .NET эквивалентно вызывать System.Runtime.InteropServices.Marshal.ReleaseComObject (cv2).Как только вы это сделаете, объект, на который ссылается cv2, недействителен, поэтому не вызывайте его снова.