Разве невозможно / плохо / опасно делать ReleaseCOMObject в деструкторе? (Я видел только предложения поместить его в Dispose (), а не в деструктор - почему?)
Рекомендуется не помещать ваш код очистки в финализатор, потому что в отличие от деструктора в C ++ он не вызывается детерминистически. Он может быть вызван вскоре после выхода объекта из области видимости. Это может занять час. Это никогда не может называться. В целом, если вы хотите избавиться от неуправляемых объектов, вы должны использовать шаблон IDisposable, а не финализатор.
Это решение , которое вы связали с попытками обойти эту проблему, явно вызвав сборщик мусора и ожидая завершения финализаторов. Это действительно не рекомендуется в целом, но для этой конкретной ситуации некоторые люди считают это приемлемым решением из-за сложности отслеживания всех временных неуправляемых объектов, которые создаются. Но явная очистка - это правильный способ сделать это. Однако, учитывая сложность этого, этот «взлом» может быть приемлемым. Обратите внимание, что это решение, вероятно, лучше предложенной вами идеи.
Если вместо этого вы хотите попытаться очистить явным образом, рекомендация «не используйте две точки с COM-объектами» поможет вам не забывать сохранять ссылку на каждый созданный вами объект, чтобы вы могли очистить их при готово.