Stworzyłem bibliotekę klas, która wykonuje geoprzetwarzanie. Dodatek wywołuje klasę, która jest procesem asynchronicznym. Upewniłem się, że wątek jest STA, a obiekty Arc są bezpieczne dla wątków (tzn. Nie zostały przekazane z dodatku). Wszystkie obiekty łukowe są tworzone w wątku.
Ponieważ jest to biblioteka klas, zawarłem ją w interfejsie użytkownika winforms, a także jako dodatek. Oba zestawy kodu są dokładnie takie same, a test został przeprowadzony przy użyciu dokładnie tych samych danych. Zarówno winforms, jak i addin uzupełniają kod z pożądanymi wynikami i nie są widoczne żadne wycieki pamięci. W przypadku dodatku nie ma w tym momencie interakcji z okresem mapy i nie ma elementów mapowania ani wyświetlania w kodzie winforms.
jedynymi aktualizacjami interfejsu użytkownika są aktualizacja okna dialogowego postępu zarówno w dodatku, jak i interfejsie użytkownika. Dodatek korzysta z dokowalnego okna (interfejs użytkownika).
Problem, który widzę, polega na tym, że biblioteka jest wywoływana z dodatku, wykonywanie kodu jest 5 razy wolniejsze niż ten sam kod wywoływany przez aplikację winforms.
Wszelkie pomysły na to, gdzie mogę sprawdzić, dlaczego tak się dzieje?
źródło
Activator.CreateInstance
czy znew
?Odpowiedzi:
Porównując obie wersje, możesz mierzyć więcej niż tylko czas geoprzetwarzania.
Być może w twojej samodzielnej aplikacji są uruchomione pewne procedury inicjalizacji, które są już wykonywane w ArcMap podczas uruchamiania, np. Utworzenie obiektu MxDocument, sprawdzenie licencji, utworzenie scratch GDB itp.
Może również występować różnica w wersji .NET Framework używanej w ArcMap i twojej aplikacji komputerowej (chociaż nie widzę, aby powodowało to 5-krotne spowolnienie).
źródło