Вы совершенно правы: неуправляемый код не может управляться и, следовательно, должен управляться вручную: уничтожен. Тем не менее, это во многом зависит от того, что вы делаете, но во многих случаях достаточно обернуть экземпляр объекта вокруг блока Using. Это работает только если вы используете объект, который реализует IDisposable
.
Однако, как вы сейчас создаете экземпляр COM-объекта, у вас не будет возможности легко его очистить. Это зависит от объекта. Когда он не нуждается в очистке (проверьте деструктор FwMgr), он также не нуждается в утилизации. Однако большинство объектов COM нуждаются в удалении.
Итак, как добавить интерфейс IDisposable
к COM-объекту, который изначально не поддерживает его? Это немного трудоемко сделать вручную, но вы должны создать сборку оболочки .NET. К счастью, работа была взята из наших рук, и Microsoft создала некоторые инструменты и рекомендации .
Часть этой информации также описана здесь . Вы можете также поискать WeakReference в качестве альтернативы.
Обратите внимание, что COM и .NET плохо общаются друг с другом, но общаются. Отличным справочником является .NET и COM Полное руководство по взаимодействию от Don Box, SAMS Publishing.
EDIT:
В ответ на ваш вопрос «утечки памяти»: невозможно сказать, ввели ли вы утечку памяти и насколько она велика. Это зависит от того, как часто вы вызываете свой COM-объект. Вызовите это один раз за запущенный процесс? Не волнуйся слишком сильно. Назовите это сотыми разами во внутреннем цикле? Будь очень осторожен. Хотите знать наверняка? Поиск оригинальной документации или источника: если он освобождает дескрипторы, память или другие ресурсы, когда он разрушен, тогда да, вы допустили утечку.