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?
sumber
Activator.CreateInstance
, atau dengannew
?Jawaban:
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).
sumber