我创建了一个类库,该类库进行了一些地理处理。插件会调用一个异步过程的类。我已经确保线程是STA,并且arcobjects是线程安全的(即未从插件中传递)。所有arcobjects在线程内创建。
因为这是一个类库,所以我将其包装在winforms UI中,也作为外接程序包装。两组代码完全相同,并且使用完全相同的数据执行测试。Winforms和Addin都以所需的结果完成了代码,并且没有明显的内存泄漏。对于插件,此时与映射周期没有交互,并且winforms代码中也没有映射或显示元素。
唯一的UI更新是插件和UI中进度对话框的更新。该插件正在使用可停靠窗口(用户控件ui)。
我看到的问题是,从插件中调用库时,代码执行速度比通过winforms应用程序调用的相同代码慢5倍。
关于我可能会看到为什么发生的任何想法?
您是否使用任何arcobjects 单例?
—
Kirk Kuykendall
是的,快速浏览一下列表,我正在使用一些工作区工厂对象打开独立于ArcMap的要素类,以便在线程内创建它们。我正在创建两个工作区工厂(用于我的输入和输出),然后使用我使用工厂创建的内存工作区在本地循环和缓存数据。我应该只创建一次内存工作空间工厂吗?我应该提到代码不会失败,并且只有在插件中执行时才会很慢。
—
贾斯汀·卡拉西克
您是使用创建
—
Kirk Kuykendall
Activator.CreateInstance
还是使用new
?
我(或曾经)正在使用新的。我现在更新以尝试使用Activator.CreateInstance方法。
—
贾斯汀·卡拉西克
我更新了代码(感谢指出),但看不到更新的真正区别。
—
贾斯汀·卡拉西克