Объекты COM обычно имеют детерминированное уничтожение: они освобождаются при освобождении последней ссылки.
Как это обрабатывается в С# - COM Interop? Классы не реализуют IDisposable
, поэтому я не вижу возможности запуска явного IUnknown:: Release.
Случайный тест показывает, что непринятые объекты COM собираются лениво (т.е. сборщик мусора запускает выпуск). Что мне делать для объектов OCM, которые должны быть выпущены агрессивно? (например, проведение больших или общих критических ресурсов)?
Исходная проблема: у нас есть приложение С#, сильно использующее библиотеку COM, и оно протекает как безумное. Похоже, что проблемы "между" С++ и С# -кодом (у нас есть доступ к обоим), но мы не можем сгладить его.