Eu criei uma biblioteca de classes que faz algum geoprocessamento. O suplemento chama uma classe que é um processo assíncrono. Eu garanti que o thread é STA e os arcobjects são thread-safe (ou seja, não foram passados do addin). Todos os objetos de arco são criados dentro do encadeamento.
Por ser uma biblioteca de classes, envolvi-a em uma interface do winforms e também como um complemento. Ambos os conjuntos de códigos são exatamente os mesmos e o teste foi realizado usando exatamente os mesmos dados. Tanto o winforms quanto o addin completam o código com os resultados desejados e nenhum vazamento de memória é evidente. Para o caso do complemento, não há interação com o período do mapa neste momento e também não há elementos de mapeamento ou exibição no código do winforms.
as únicas atualizações da interface do usuário são a atualização de uma caixa de diálogo de progresso no suplemento e na interface do usuário. O complemento está usando uma janela acoplável (interface do usuário de controle do usuário).
O problema que estou vendo é que quando a biblioteca é chamada a partir do suplemento, a execução do código é 5x mais lenta que o mesmo código chamado pelo aplicativo winforms.
Alguma idéia de onde devo procurar para ver por que isso está ocorrendo?
fonte
Activator.CreateInstance
, ou comnew
?Respostas:
Ao comparar as duas versões, você pode estar cronometrando mais do que apenas o tempo de geoprocessamento.
Talvez existam alguns procedimentos de inicialização em execução no seu aplicativo independente que já são executados no ArcMap na inicialização, por exemplo, criação de objeto MxDocument, verificação de licença, criação de GDB inicial, etc.
Também pode haver uma diferença na versão do .NET Framework usada no ArcMap e no aplicativo da área de trabalho (embora eu não veja isso causando uma redução de 5x).
fonte