ArcObjects работает в Addin медленнее?

9

Я создал библиотеку классов, которая выполняет некоторую геообработку. Надстройка вызывает класс, который является асинхронным процессом. Я убедился, что поток является STA, а объекты arcobject являются потокобезопасными (то есть не передаются из надстройки). Все arcobjects создаются в потоке.

Поскольку это библиотека классов, я обернул ее в пользовательский интерфейс winforms, а также в качестве надстройки. Оба набора кода абсолютно одинаковы, и тестирование проводилось с использованием одинаковых данных. И winforms, и addin дополняют код желаемыми результатами, и никаких утечек памяти не видно. Для случая надстройки в этот момент нет взаимодействия с периодом карты, и в коде winforms также нет элементов отображения или отображения.

единственные обновления пользовательского интерфейса - это обновление диалогового окна прогресса как в надстройке, так и в пользовательском интерфейсе. Надстройка использует закрепляемое окно (пользовательский интерфейс управления).

Проблема, которую я вижу, заключается в том, что когда библиотека вызывается из надстройки, выполнение кода происходит в 5 раз медленнее, чем тот же код, вызываемый из приложения winforms.

Любые идеи о том, где я мог бы посмотреть, почему это происходит?

Джастин Карасик
источник
Используете ли вы какие-либо arcobjects синглтоны ?
Кирк Куйкендалл
Да, быстрый взгляд на список, и я использую несколько заводских объектов, чтобы открыть мои классы пространственных объектов, независимые от ArcMap, чтобы они создавались в потоке. Я создаю две фабрики рабочих пространств (для ввода и вывода), затем зацикливаю и кэширую данные локально, используя рабочую область памяти, которую я использую для создания фабрики. Должен ли я создать мемориал рабочего пространства только один раз? Я должен отметить, что код не дает сбоя и работает медленно только при выполнении в надстройке.
Джастин Карасик
Вы создаете, используя Activator.CreateInstance, или с new?
Кирк Куйкендалл
Я (или был) использую новый. Я обновляюсь сейчас, чтобы попробовать метод Activator.CreateInstance.
Джастин Карасик
Я обновил код (спасибо, что указал на это), но не вижу реальной разницы с обновлением.
Джастин Карасик

Ответы:

1

При сравнении обеих версий вы можете рассчитывать не только время геообработки.

Возможно, в вашем автономном приложении выполняются некоторые процедуры инициализации, которые уже выполняются в ArcMap при запуске, например, создание объекта MxDocument, проверка лицензии, создание пустой GDB и т. Д.

Также может быть разница в версии .NET Framework, используемой в ArcMap и вашем настольном приложении (хотя я не вижу, что это вызывает 5-кратное замедление).

Berend
источник