Правильная утилизация объектов COM-взаимодействия в C#, особенно в приложениях MS Office

Я разрабатываю приложение, которое в значительной степени зависит от нескольких продуктов Microsoft Office, включая Access, Excel, Word, PowerPoint и Outlook среди прочих. Изучая взаимодействие, я обнаружил, что, начиная с VS2010 и .NET 4, нам, к счастью, больше не приходится переживать кошмары PIA.

Кроме того, я читал много статей о правильном избавлении от предметов, наиболее толковой мне показалась эта.

Однако статье уже 5 лет, а авторитетных публикаций на эту тему, насколько я знаю, не так много. Вот пример кода из приведенной выше ссылки:

' Cleanup:
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
GC.WaitForPendingFinalizers()

Marshal.FinalReleaseComObject(worksheet)

oWB.Close(SaveChanges:=False)
Marshal.FinalReleaseComObject(workbook)

oApp.Quit()
Marshal.FinalReleaseComObject(application)

Что я хочу знать по сегодняшним стандартам, насколько это точно и на что следует обращать внимание, если я рассчитываю поддерживать свое приложение в ближайшие несколько лет?

ОБНОВЛЕНИЕ:Ссылки на некоторые заслуживающие доверия статьи будут весьма признательны. Кстати, это не серверное приложение. Это будет работать в компьютерных классах, где у нас есть пользователи, взаимодействующие с офисными продуктами, которые мы создаем для них.

НАЙДЕН ЭТО:Этастатья из трех частей, вероятно, наиболее близка к авторитетному сообщению, которое я ожидал найти.

13
задан Kara 3 April 2014 в 16:32
поделиться