ArcObjects działa wolniej w Addin?


9

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?


Czy używasz singletonów Arcobjects ?
Kirk Kuykendall

Tak, szybkie spojrzenie na listę i korzystam z kilku obiektów przestrzeni roboczej, aby otworzyć moje klasy obiektów niezależnie od ArcMap, aby zostały utworzone w wątku. Tworzę dwa przestrzenie robocze (dla danych wejściowych i wyjściowych), a następnie lokalnie zapętlam i buforuję dane za pomocą obszaru pamięci, który używam do tworzenia w fabryce. Czy powinienem utworzyć pakiet pamięciowy tylko raz? Powinienem wspomnieć, że kod nie zawodzi i jest powolny tylko wtedy, gdy jest wykonywany w dodatku.
Justin Carasick

Czy tworzysz za pomocą Activator.CreateInstanceczy z new?
Kirk Kuykendall

Używam (lub używałem) nowego. Aktualizuję się teraz, aby wypróbować metodę Activator.CreateInstance.
Justin Carasick

Zaktualizowałem kod (dzięki za wskazanie tego), ale nie widzę prawdziwej różnicy w aktualizacji.
Justin Carasick

Odpowiedzi:


1

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).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.