Я создал библиотеку классов, которая выполняет некоторую геообработку. Надстройка вызывает класс, который является асинхронным процессом. Я убедился, что поток является STA, а объекты arcobject являются потокобезопасными (то есть не передаются из надстройки). Все arcobjects создаются в потоке.
Поскольку это библиотека классов, я обернул ее в пользовательский интерфейс winforms, а также в качестве надстройки. Оба набора кода абсолютно одинаковы, и тестирование проводилось с использованием одинаковых данных. И winforms, и addin дополняют код желаемыми результатами, и никаких утечек памяти не видно. Для случая надстройки в этот момент нет взаимодействия с периодом карты, и в коде winforms также нет элементов отображения или отображения.
единственные обновления пользовательского интерфейса - это обновление диалогового окна прогресса как в надстройке, так и в пользовательском интерфейсе. Надстройка использует закрепляемое окно (пользовательский интерфейс управления).
Проблема, которую я вижу, заключается в том, что когда библиотека вызывается из надстройки, выполнение кода происходит в 5 раз медленнее, чем тот же код, вызываемый из приложения winforms.
Любые идеи о том, где я мог бы посмотреть, почему это происходит?
источник
Activator.CreateInstance
, или сnew
?Ответы:
При сравнении обеих версий вы можете рассчитывать не только время геообработки.
Возможно, в вашем автономном приложении выполняются некоторые процедуры инициализации, которые уже выполняются в ArcMap при запуске, например, создание объекта MxDocument, проверка лицензии, создание пустой GDB и т. Д.
Также может быть разница в версии .NET Framework, используемой в ArcMap и вашем настольном приложении (хотя я не вижу, что это вызывает 5-кратное замедление).
источник