He creado una biblioteca de clases que hace un poco de geoprocesamiento. El complemento llama a una clase que es un proceso asíncrono. Me he asegurado de que el hilo sea STA y los arcobjects sean seguros para el hilo (es decir, no pasaron del complemento). Todos los arcobjects se crean dentro del hilo.
Debido a que esta es una biblioteca de clase, la envolví en una interfaz de usuario winforms y también como un complemento. Ambos conjuntos de código son exactamente iguales y la prueba se realizó utilizando exactamente los mismos datos. Tanto el winforms como el complemento completan el código con los resultados deseados y no hay pérdidas de memoria evidentes. Para el caso del complemento no hay interacción con el período del mapa en este punto y tampoco hay elementos de mapeo o visualización en el código winforms.
Las únicas actualizaciones de la interfaz de usuario son la actualización de un cuadro de diálogo de progreso tanto en el complemento como en la interfaz de usuario. El complemento está utilizando una ventana acoplable (ui de control de usuario).
El problema que veo es cuando se llama a la biblioteca desde el complemento, la ejecución del código es 5 veces más lenta que el mismo código llamado a través de la aplicación winforms.
¿Alguna idea sobre dónde podría mirar para ver por qué ocurre esto?
fuente
Activator.CreateInstance
o connew
?Respuestas:
Al comparar ambas versiones, puede estar cronometrando más que solo el tiempo de geoprocesamiento.
Tal vez hay algunos procedimientos de inicialización que se ejecutan en su aplicación independiente que ya se realizaron en ArcMap en el inicio, por ejemplo, la creación del objeto MxDocument, el pago de la licencia, la creación de scratch GDB, etc.
También podría haber una diferencia en la versión de .NET Framework utilizada en ArcMap y su aplicación de escritorio (aunque no veo que eso cause una ralentización de 5x).
fuente