ArcObjects berjalan di Addin lebih lambat?

9

Saya telah membuat perpustakaan kelas yang melakukan beberapa geoproses. Addin memanggil kelas yang merupakan proses async. Saya telah memastikan utasnya adalah STA dan arcobjects adalah utas yang aman (mis. Tidak lulus dari addin). Semua arcobjects dibuat di dalam utas.

Karena ini adalah perpustakaan kelas saya membungkusnya dalam UI winforms dan juga sebagai addin. Kedua set kode sama persis dan pengujian dilakukan dengan menggunakan data yang sama persis. Baik winforms dan addin melengkapi kode dengan hasil yang diinginkan dan tidak ada kebocoran memori yang jelas. Untuk kasus addin tidak ada interaksi dengan periode peta pada saat ini dan tidak ada pemetaan atau elemen tampilan dalam kode winforms.

satu-satunya pembaruan UI adalah pembaruan dialog progres di addin dan UI. Addin menggunakan jendela dockable (kontrol pengguna ui).

Masalah yang saya lihat adalah ketika perpustakaan dipanggil dari addin, eksekusi kode lebih lambat 5x dari kode yang sama dipanggil melalui aplikasi winforms.

Adakah ide tentang di mana saya dapat melihat mengapa hal ini terjadi?

Justin Carasick
sumber
Apakah Anda menggunakan arcobjects singletons ?
Kirk Kuykendall
Ya, sekilas daftar dan saya menggunakan beberapa objek workspacefactory untuk membuka kacamata feature saya independen dari ArcMap sehingga mereka dibuat dalam utasnya. Saya membuat dua workspacefactories (untuk input dan output saya) kemudian looping dan caching data secara lokal menggunakan inmemmoryworkspace yang saya gunakan untuk membuat pabrik. Haruskah saya membuat ruang memori hanya sekali? Saya harus menyebutkan kode tidak gagal dan lambat hanya ketika dijalankan di dalam addin.
Justin Carasick
Apakah Anda membuat menggunakan Activator.CreateInstance, atau dengan new?
Kirk Kuykendall
Saya (atau sedang) menggunakan yang baru. Saya memperbarui sekarang untuk mencoba metode Activator.CreateInstance.
Justin Carasick
Saya memperbarui kode (terima kasih telah menunjukkan itu) tetapi tidak melihat perbedaan nyata dengan pembaruan.
Justin Carasick

Jawaban:

1

Saat membandingkan kedua versi, Anda mungkin menghitung waktu lebih dari waktu geoprosesing saja.

Mungkin ada beberapa prosedur inisialisasi yang berjalan di aplikasi mandiri Anda yang sudah dilakukan di ArcMap saat startup misalnya pembuatan objek MxDocument, checkout checkout, pembuatan scratch GDB, dll.

Mungkin juga ada perbedaan dalam versi .NET Framework yang digunakan di ArcMap dan aplikasi desktop Anda (Meskipun saya tidak melihat itu menyebabkan penurunan 5x).

Berend
sumber