2012Esri中国开发者大会
欢迎您
使用ArcEngine开发高可用性应用程序技术应用服务及咨询部孙炎
内容简介如何让GIS软件运行的更好、更快?综合性的就ArcEngine开发项目中常遇到的一些问题进行反思,同大家一同探讨分享交流经验!内容不仅包含ArcEngine的使用技巧,还包括软件开发、项目实施等多方面。
2012Esri中国开发者大会
应用程序的高可用性
2012Esri中国开发者大会
GIS程序的高可用性
ArcEngine开发程序常见的问题用户体验差:–界面简陋,千篇一律。–效率低下,速度缓慢。–数据量大后性能显著下降、资源消耗严重。开发者体验:–接口太多,不知如何选择。–认为没有提供接口,要自己编写。
2012Esri中国开发者大会
提高可用性的几个方面 用户UI篇对象模型图权限篇数据库篇图形显示篇网络篇制图篇
2012Esri中国开发者大会
用户UI1.关于AxControls的使用 LiscenceControl ToolbarControl TocControl MapControl\PageLayoutControl\GlobeControl SymbolControl哪些必须使用?哪些不建议使用?
2012Esri中国开发者大会
用户UI
应用示例
2012Esri中国开发者大会
用户UI 2.用户操作反馈 长事务的消息响应– IFeatureDataConvert\ IGeoDBDataTransfer–实现接口– IFeatureProgress
2012Esri中国开发者大会
对象模型图
2012Esri中国开发者大会
运行许可
2012Esri中国开发者大会
数据库篇
数据库的选择 FileGeodatabase vs PersonalGeodatabase FileGeodatabase高效的原因 Personal Geodatabase存在的理由
2012Esri中国开发者大会
要素的保存IFeatureClass– Create feature()– Store() Vs IFeatureBuffer– Insert feature()– Flush()
2012Esri中国开发者大会
查询优化IFeatureCursor.Search(filter, Recycling );– True:– False:
IQueryFilter– SubFields设置– WhereClass语句的优化 索引的使用注意事项
2012Esri中国开发者大会
Where子句的优化下列SQL条件语句中的列都建有恰当的索引,但执行速度却非常慢: SELECT * FROM record WHERE substring(code,1,4)='5378' SELECT * FROM record WHERE amount/30< 1000 SELECT * FROM record WHERE convert(char(10),date,112)='19991201'
2012Esri中国开发者大会
Where子句的优化2WHERE子句中对列的任何操作结果都是在SQL运行时逐列计算得到的,因此它不得不进行表搜索,而没有使用该列上面的索引;如果这些结果在查询编译时就能得到,那么就可以被SQL优化器优化,使用索引,避免表搜索,因此将SQL重写成下面这样: SELECT * FROM record WHERE code like '5378%' SELECT * FROM record WHERE amount< 1000*30 SELECT * FROM record WHERE date= '1999/12/01'
2012Esri中国开发者大会
内存释放需要––– Marshal.Rel
easeComObject()的地方 ICursor对象务必及时释放。 IEnumXX接口。 GetXX方法获取的对象。 比如IFeatureClass的GetFeature方法 IPointCollection的GetPoint方法– IWorkspace 打开单个文件数据库后的方法– Mxd文档打开后的关闭
2012Esri中国开发者大会