Addin에서 실행되는 ArcObject가 느려 집니까?


9

지오 프로세싱을 수행하는 클래스 라이브러리를 만들었습니다. 추가 기능은 비동기 프로세스 인 클래스를 호출합니다. 스레드가 STA이고 arcobjects가 스레드 안전하다는 것을 확인했습니다 (즉, addin에서 전달되지 않음). 모든 arcobjects는 스레드 내에서 작성됩니다.

이것은 클래스 라이브러리이기 때문에 winforms UI와 추가 기능으로 래핑했습니다. 두 코드 세트는 정확히 동일하며 테스트는 정확히 동일한 데이터를 사용하여 수행되었습니다. winform과 addin은 모두 원하는 결과로 코드를 완성하며 메모리 누수는 분명하지 않습니다. 추가 기능의 경우이 시점에서 맵 기간과 상호 작용하지 않으며 winforms 코드에도 매핑 또는 표시 요소가 없습니다.

유일한 UI 업데이트는 addin 및 UI 모두에서 진행률 대화 상자 업데이트입니다. 추가 기능이 고정 가능한 창 (사용자 정의 UI)을 사용하고 있습니다.

내가보고있는 문제는 라이브러리가 addin에서 호출 될 때 코드 실행이 winforms 응용 프로그램을 통해 호출 된 동일한 코드보다 5 배 느립니다.

왜 이런 일이 발생하는지 볼 수있는 곳에 대한 아이디어가 있습니까?


arcobjects 싱글 톤 을 사용하고 있습니까?
Kirk Kuykendall

예, 목록을 간단히 살펴보면 작업 공간 팩토리 객체 몇 개를 사용하여 ArcMap과 무관 한 피쳐 클래스를 열어 스레드 내에 작성됩니다. 두 개의 작업 공간 팩토리 (입력 및 출력용)를 만든 다음 공장을 사용하여 생성하는 비 작업 공간을 사용하여 로컬로 데이터를 루핑하고 캐싱합니다. 메모리 작업 공간 팩토리를 한 번만 작성해야합니까? 코드가 실패하지 않으며 addin 내에서 실행될 때만 느려집니다.
저스틴 Carasick

Activator.CreateInstance또는을 사용하여 작성 중 new입니까?
Kirk Kuykendall

나는 새로운 것을 사용하고있다. Activator.CreateInstance 메소드를 시도하기 위해 지금 업데이트 중입니다.
저스틴 Carasick

코드를 업데이트했지만 (감사합니다) 업데이트와 실제로 다른 점은 없습니다.
저스틴 Carasick

답변:


1

두 버전을 비교할 때 지리 처리 시간 이상의 타이밍을 가질 수 있습니다.

시작시 ArcMap에서 이미 수행 된 일부 독립 실행 형 응용 프로그램에서 일부 초기화 절차가있을 수 있습니다 (예 : MxDocument 객체 생성, 라이센스 체크 아웃, 스크래치 GDB 생성 등).

ArcMap 및 데스크톱 응용 프로그램에서 사용되는 .NET Framework 버전에 차이가있을 수도 있습니다 (5 배 속도 저하가 발생하지는 않지만).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.