c # — при выгрузке домена приложения не очищаются статические члены COM-объекта C ++

Я использую сторонние C ++ COM-объекты, которые, кажется, содержат несколько статических членов. Дело в том, что я должен сбрасывать статические элементы каждый раз, когда начинаю новый прогон. Поэтому мне нужно закрыть и открыть свое приложение. Я пытался использовать AppDomain для выгрузки всей памяти этих статических членов, но я понятия не имею, почему это не сработает. Я снимаю COM-объект, используя Activator.CreateInstance(Type.GetTypeByCLSID) Есть ли что-нибудь, что мне нужно сделать вручную, чтобы избавиться от этих экземпляров? обратите внимание, что я проверил, и любые статические объекты C # располагают таким образом.

0

Решение

Неуправляемые ресурсы называются неуправляемый потому что их память не обрабатывается управляемый сборщик мусора.

Любой неуправляемый ресурс должен быть удален вручную. Это одна из целей (если не самая важная) IDisposable: его реализации имеют некоторый связанный неуправляемый ресурс. Например, FileStream должен быть удален вручную, потому что это оболочка вызовов Win32 API.

В итоге выгрузка AppDomain или любой другой подход не поможет здесь. Вы тот, кому нужно написать код для утилизации этих статических COM-ресурсов, когда они вам больше не нужны (т.е. когда вы закрываете приложение).

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]