Использование COM и запрос объектов, которые все еще "живы" - PullRequest
0 голосов
/ 30 июля 2010

Я много работаю с ArcObjects, API-интерфейсом ESRI для программирования для приложений ArcGIS.

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

Я уже знаю, чтобы освободить их, но я бы осмотрел каждый метод, чтобы увидеть, есть ли какие-нибудь остатки.

Ответы [ 3 ]

1 голос
/ 30 июля 2010

Случайный набор в «COM Inspector» в Google произвел эту ссылку . Выглядит хорошо, личного опыта нет. Запустите этот запрос самостоятельно, чтобы найти других.

1 голос
/ 31 июля 2010

Если вы используете .NET, вы должны пройти через все сборки, которые были загружены с помощью AppDomain.CurrentDomain.GetAssemblies .

Чтобы узнать, какие расширения загружены, используйте IExtensionManager для циклического прохождения расширений.

Просмотр загруженных панелей команд немного сложнее .

1 голос
/ 30 июля 2010

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

Также COM-объекты никогда не выделяются в стеке; они всегда располагаются в куче.

[*], хотя ATom CComObjectStack <> довольно удобен для модульного тестирования.

...