アドインで実行されているArcObjectsの動作が遅いですか?


9

ジオプロセシングを行うクラスライブラリを作成しました。アドインは、非同期プロセスであるクラスを呼び出します。スレッドがSTAであり、arcobjectsがスレッドセーフであること(つまり、アドインから渡されない)であることを確認しました。すべてのアークオブジェクトはスレッド内に作成されます。

これはクラスライブラリであるため、winforms UIにアドインとしてラップしました。コードの両方のセットはまったく同じであり、テストはまったく同じデータを使用して実行されました。winformsとアドインの両方でコードが完成し、望ましい結果が得られ、メモリリークは明らかではありません。アドインの場合、この時点ではマップ期間との相互作用はなく、winformsコードにはマッピングまたは表示要素もありません。

UIの更新は、アドインとUIの両方の進行状況ダイアログの更新のみです。アドインはドッキング可能なウィンドウ(ユーザーコントロールUI)を使用しています。

私が見ている問題は、ライブラリがアドインから呼び出されると、コードの実行がwinformsアプリケーションから呼び出される同じコードよりも5倍遅いということです。

なぜこれが発生しているのか、どこを見ればよいのかについてのアイデア


arcobjects シングルトンを使用していますか?
カークカイケンダル2013年

はい、リストをざっと見て、ArcMapに依存しないフィーチャクラスをいくつかのワークスペースファクトリオブジェクトを使用して開き、スレッド内に作成します。(入力と出力用に)2つのワークスペースファクトリを作成し、ファクトリを使用して作成するinmemmoryworkspaceを使用してローカルでデータをループおよびキャッシュしています。inmemoryworkspacefactoryを一度だけ作成する必要がありますか?コードは失敗せず、アドイン内で実行された場合にのみ遅くなることを述べておきます。
Justin Carasick 2013年

を使用して作成しActivator.CreateInstanceていnewますか、それとも一緒に作成していますか?
カークカイケンダル2013年

新しい(または使用していた)を使用しています。今、Activator.CreateInstanceメソッドを試すために更新しています。
Justin Carasick 2013年

コードを更新しましたが(指摘してくれてありがとう)、更新による実際の違いはわかりません。
Justin Carasick

回答:


1

両方のバージョンを比較する場合、ジオプロセシングの時間だけでなく、それ以上のタイミングが必要になる場合があります。

おそらく、MxDocumentオブジェクトの作成、ライセンスのチェックアウト、スクラッチGDBの作成など、起動時にArcMapですでに実行されているスタンドアロンアプリケーションで実行されているいくつかの初期化手順があります。

また、ArcMapとデスクトップアプリケーションで使用されている.NET Frameworkのバージョンにも違いがある可能性があります(ただし、5倍の速度低下が発生することはありません)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.