Как правильно очистить объекты interop в C#

Мой codegolfing коллега придумал этот (ES6), включительно:

(s,f)=>[...Array(f-s+1)].map((e,i)=>i+s)

не включительно:

(s,f)=>[...Array(f-s)].map((e,i)=>i+s)
5
задан Community 23 May 2017 в 12:30
поделиться

2 ответа

Определенно более важно правильно обрабатывать выпуски при работе с приложениями Office, чем со многими другими библиотеками COM, по двум причинам.

  1. Приложения Office работают как вне серверов процессов, а не внутри процесса библиотеки. Если вы не очистите должным образом, вы оставите процесс запущенным.
  2. Приложения Office (особенно Excel IIRC) не завершаются должным образом, даже если вы вызываете Application.Quit, если есть невыполненные ссылки на его COM-объекты.

Для обычных, внутрипроцессных библиотек COM последствия неправильной очистки не столь драматичны. Когда ваш процесс завершается, все внутрипроцессные библиотеки уходят вместе с ним. И если вы забудете вызвать ReleaseComObject для объекта, когда он вам больше не нужен, о нем все равно позаботятся, когда объект будет завершен.

Тем не менее,

6
ответ дан 14 December 2019 в 04:43
поделиться

COM-объекты по сути являются неуправляемым кодом - и как только вы начинаете вызывать неуправляемый код из управляемого приложения, вы обязаны очистить после этого неуправляемый код.

Короче говоря, шаблон, указанный в приведенном выше сообщении, необходим для всех COM-объектов.

2
ответ дан 14 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: