Ich habe eine Klassenbibliothek erstellt, die Geoverarbeitung durchführt. Das Add-In ruft eine Klasse auf, die ein asynchroner Prozess ist. Ich habe sichergestellt, dass der Thread STA ist und die ArcObjects threadsicher sind (dh nicht vom Addin übergeben werden). Alle Bogenobjekte werden innerhalb des Threads erstellt.
Da dies eine Klassenbibliothek ist, habe ich sie in eine Winforms-Benutzeroberfläche und auch als Add-In eingebunden. Beide Codesätze sind genau gleich und der Test wurde mit genau den gleichen Daten durchgeführt. Sowohl die Winforms als auch das Add-In vervollständigen den Code mit den gewünschten Ergebnissen, und es sind keine Speicherlecks erkennbar. Für den Fall des Add-Ins gibt es zu diesem Zeitpunkt keine Interaktion mit dem Map-Zeitraum und es gibt auch keine Mapping- oder Anzeigeelemente im Winforms-Code.
Die einzigen UI-Updates sind die Updates eines Fortschrittsdialogs sowohl im Add-In als auch in der UI. Das Add-In verwendet ein andockbares Fenster (Benutzersteuerungs-Benutzeroberfläche).
Das Problem, das ich sehe, ist, wenn die Bibliothek vom Add-In aufgerufen wird, die Codeausführung 5x langsamer ist als der gleiche Code, der über die Winforms-Anwendung aufgerufen wird.
Irgendwelche Ideen, wo ich nachsehen könnte, warum dies geschieht?
quelle
Activator.CreateInstance
oder mitnew
?Antworten:
Wenn Sie beide Versionen vergleichen, planen Sie möglicherweise mehr als nur die Geoverarbeitungszeit.
Möglicherweise werden in Ihrer eigenständigen Anwendung einige Initialisierungsverfahren ausgeführt, die bereits beim Start in ArcMap ausgeführt werden, z. B. das Erstellen eines MxDocument-Objekts, das Auschecken von Lizenzen, das Erstellen von Scratch-GDB usw.
Es kann auch einen Unterschied zwischen der in ArcMap und Ihrer Desktop-Anwendung verwendeten .NET Framework-Version geben (obwohl ich nicht sehe, dass dies zu einer 5-fachen Verlangsamung führt).
quelle