ArcObjects chạy trong Addin chậm hơn?


9

Tôi đã tạo một thư viện lớp thực hiện một số công cụ địa lý. Addin gọi một lớp là một quá trình không đồng bộ. Tôi đã đảm bảo luồng là STA và các arcobject là luồng an toàn (nghĩa là không được truyền từ addin). Tất cả các arcobject được tạo trong chuỗi.

Bởi vì đây là một thư viện lớp, tôi đã gói nó trong một giao diện người dùng winforms và cũng như một addin. Cả hai bộ mã này hoàn toàn giống nhau và thử nghiệm được thực hiện bằng cách sử dụng cùng một dữ liệu. Cả winforms và addin đều hoàn thành mã với kết quả mong muốn và không có rò rỉ bộ nhớ nào. Đối với trường hợp của addin, không có tương tác với thời kỳ bản đồ tại thời điểm này và cũng không có thành phần ánh xạ hoặc hiển thị trong mã winforms.

các bản cập nhật UI duy nhất là bản cập nhật của hộp thoại tiến trình trong cả addin và UI. Addin đang sử dụng một cửa sổ có thể gắn được (điều khiển người dùng ui).

Vấn đề tôi gặp là khi thư viện được gọi từ addin, việc thực thi mã chậm hơn 5x so với cùng mã được gọi thông qua ứng dụng winforms.

Bất kỳ ý tưởng về nơi tôi có thể nhìn để xem tại sao điều này xảy ra?


Bạn đang sử dụng bất kỳ singletons arcobjects ?
Kirk Kuykendall 18/03/13

Vâng, hãy xem nhanh danh sách và tôi đang sử dụng một vài đối tượng không gian làm việc để mở độc lập featureclass của ArcMap để chúng được tạo trong luồng. Tôi đang tạo hai không gian làm việc (cho đầu vào và đầu ra của mình) sau đó lặp và lưu trữ dữ liệu cục bộ bằng cách sử dụng một không gian inmemmorywork mà tôi sử dụng một nhà máy để tạo. Tôi có nên tạo inmemoryworkspacefactory chỉ một lần không? Tôi nên đề cập đến mã không thất bại và chỉ chậm khi được thực thi trong addin.
Justin Carasick 18/03/13

Bạn đang tạo bằng cách sử dụng Activator.CreateInstance, hoặc với new?
Kirk Kuykendall

Tôi đang (hoặc đã) sử dụng cái mới. Tôi đang cập nhật ngay bây giờ để thử phương thức Activator.CreateInstance.
Justin Carasick 18/03/13

Tôi đã cập nhật mã (cảm ơn vì đã chỉ ra điều đó) nhưng không thấy sự khác biệt thực sự với bản cập nhật.
Justin Carasick 18/03/13

Câu trả lời:


1

Khi so sánh cả hai phiên bản, bạn có thể định thời gian nhiều hơn chỉ là thời gian xử lý địa lý.

Có lẽ có một số quy trình khởi tạo đang chạy trong ứng dụng độc lập của bạn đã được thực hiện trong ArcMap khi khởi động, ví dụ: tạo đối tượng MxDocument, kiểm tra giấy phép, tạo GDB đầu, v.v.

Cũng có thể có một sự khác biệt trong phiên bản .NET Framework được sử dụng trong ArcMap và ứng dụng máy tính để bàn của bạn (Mặc dù tôi không thấy điều đó gây ra sự chậm lại 5x).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.