На сегодняшний день, как правильно работать с COM-объектами?
Это очень распространенный вопрос, и я решил задать его, потому что на этот вопрос сегодня может быть другой ответ. Надеемся, ответы помогут понять, как правильно работать с COM-объектами. Лично я чувствую себя очень смущенным после получения различных мнений по этому вопросу.
Последние 5 лет я работал с COM-объектами, и для меня правила были очень ясны:
Используйте один период в строках кода. Используя более одного периода, создайте временные объекты за сценой, которые не могут быть явно освобождены.Не используйте foreach, используйте цикл for и освобождайте каждый элемент на каждой итерацииНе вызывайте FInalReleaseComObject, вместо этого используйте ReleaseComObject.Не используйте GC для освобождения объектов COM. GC намерение в основном для отладки использования.Выпускать объекты в обратном порядке их создания.Некоторые из вас могут быть разочарованы после прочтения этих последних строк, это то, что я знал о том, как правильно создавать / выпускать Com Object, я надеюсь получить ответы, которые сделают его более понятным и неоспоримым.
Ниже приведены ссылки, которые я нашел по этой теме. Некоторые из них говорят, что необходимо вызвать ReleaseComObject, а некоторые нет.
Как правильно выпустить Excel COM объекты (Ноябрь 2013 г.)Правильный способ освобождения COM-объектов в .NET (Август 2011 г.)Marshal.ReleaseComObject считается опасным (Март 2010 г.)ReleaseCOMObject (Апрель 2004 г.)«... В сценариях VSTO вам обычно не нужно использовать ReleaseCOMObject. ...»
MSDN -Метод Marshal.ReleaseComObject (текущая версия .NET Framework):«... Вы должны использовать этот метод для освобождения базового COM-объекта, который содержит ссылки ...»
ОБНОВИТЬ:
Этот вопрос был помечен как слишком широкий. По запросу я постараюсь упростить и задать более простые вопросы.
Требуется ли ReleaseComObject при работе с COM-объектами или правильный способ вызова GC?Меняет ли подход VSTO способ, которым мы привыкли работать с COM-объектами?Какие из приведенных выше правил являются обязательными, а какие нет? Есть ли другие?