在Addin中运行的ArcObjects速度较慢?


9

我创建了一个类库,该类库进行了一些地理处理。插件会调用一个异步过程的类。我已经确保线程是STA,并且arcobjects是线程安全的(即未从插件中传递)。所有arcobjects在线程内创建。

因为这是一个类库,所以我将其包装在winforms UI中,也作为外接程序包装。两组代码完全相同,并且使用完全相同的数据执行测试。Winforms和Addin都以所需的结果完成了代码,并且没有明显的内存泄漏。对于插件,此时与映射周期没有交互,并且winforms代码中也没有映射或显示元素。

唯一的UI更新是插件和UI中进度对话框的更新。该插件正在使用可停靠窗口(用户控件ui)。

我看到的问题是,从插件中调用库时,代码执行速度比通过winforms应用程序调用的相同代码慢5倍。

关于我可能会看到为什么发生的任何想法?


您是否使用任何arcobjects 单例
Kirk Kuykendall

是的,快速浏览一下列表,我正在使用一些工作区工厂对象打开独立于ArcMap的要素类,以便在线程内创建它们。我正在创建两个工作区工厂(用于我的输入和输出),然后使用我使用工厂创建的内存工作区在本地循环和缓存数据。我应该只创建一次内存工作空间工厂吗?我应该提到代码不会失败,并且只有在插件中执行时才会很慢。
贾斯汀·卡拉西克

您是使用创建Activator.CreateInstance还是使用new
Kirk Kuykendall

我(或曾经)正在使用新的。我现在更新以尝试使用Activator.CreateInstance方法。
贾斯汀·卡拉西克

我更新了代码(感谢指出),但看不到更新的真正区别。
贾斯汀·卡拉西克

Answers:


1

比较两个版本时,您可能会花更多的时间而不只是地理处理时间。

也许有一些初始化过程正在您的独立应用程序中运行,这些初始化过程在启动时已经在ArcMap中执行,例如创建MxDocument对象,许可证签出,创建暂存GDB等。

ArcMap和桌面应用程序中使用的.NET Framework版本也可能有所不同(尽管我看不到会导致速度降低5倍)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.