




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、地理信息系统数据库系统地理信息系统数据库系统GeodatabaseGeodatabase的高效编程的高效编程内容概要 单例对象与多线程游标与使用 Geodatabase API 编辑数据Geodatabase 开发常见错误单例对象与多线程ArcObjects 的线程模型Geodatabase 中的单实例对象 简单的多线程应用示例(C#)COM 的线程模型COM支持三种套间模型:STA MTA NA(COM+)套间外线程调用使用线程套间模型STA ThreadCoInitialize创建一个STA套间,并将当前的调用线程和这 个套间相关联,被调用COM对象也会和该套 间关联,实现套间内的对象调用
2、。当使用一个MTA线程去调用注册为STA的COM对象时,则COM运行时会首先创建 一个STA线程,然后使用该线程创建STA套间,并与此关联,在里面创建类的实例。 这将导致跨套间的调用!ArcObjects 的线程模型所有的ArcObjects对象都注册为STA线程模型ApartmentFreeNeutralBothSTAMTANASTA or MTAGeodatabase API 中的单实例对象在一个线程中只有一个对象被实例化例如:Table、FeatureClass、FeatureDatasetWorksapce、Version在一个线程中的所有获得的单例对象都指向一个引用True简单的多线
3、程应用示例(C#)游标游标与使与使用用Geodatabase API 编辑数编辑数 据据游标与使用Geodatabase API 编辑数据 游标 编辑会话使用游标进行Geodatabase编辑游标(Cursor) 游标类型类游标: SearchCursor、UpdateCursor、InsertCursor自定义查询游标:QueryDef Cursor 获取并使用游标类游标与自定义查询游标对 COM 组件的调用返回了错 误HRESULT E_FAILTrueRecycling Cursor 和 No-Recycling CursorRow ObjectRecycling CursorNextR
4、ow()No-Recycling CursorRow ObjectRow ObjectNextRow()True使用Recycling Cursor数据数据情况情况:简单简单的的线要线要素素类类,2721089条记录条记录 测试测试环境环境:硬件硬件(T9600 CPU 4G内内存)软件存)软件(Windows 7 测试场测试场景景:取取出所出所有要素有要素备注:备注:测测试结试结果中果中时间单时间单位位为毫秒为毫秒Oracle 11g ArcGIS 10)Recycling=true60MRecycling=false185MInsertCursor 与 ArcSDE Geodatabase
5、 缓存ClientServerInsert CursorStore in Transmission BufferInsertRowT-Buffer Filled ?Flush Transmission BufferFlushYesStore in Server BufferWas Flush Called ?S-Buffer Filled ?YesNoYesReturn ResultNoNoStore in DBMS游标使用注意事项查询游标(Search Cursor) 在编辑会话中初始化SearchCursor可能导致缓存记录提交到数据库(触发DBMS写操作)通过SearchCursor获得
6、的行支持Store和Delete操作更新游标(Update Cursor)必须使用UpdateCursor提供的的UpdateRow和DeleteRow方法对通过UpdateCursor获得的行进行更 新和删除操作UpdateCursor提供的UpdateRow方法只能针对通过UpdateCursor获得的当前行进行操作 UpdateCursor不支持跨编辑操作使用,打开一个新的编辑操作时必须初始化一个新的更新游标 使用UpdateCursor对复杂要类类进行更新时必须处于一个编辑会话中插入游标(Insert Cursor) 主要用于批量要素插入 使用缓存,定时调用Flush将缓存写入数据库,
7、调用InsertRow和Flush方法时要捕捉异常使用InsertCursor时关闭空间缓存QueryDef 游标不能针对通过QueryDef Cursor获得的行进行Store和Delete操作 在编辑会话中使用QueryDef Cursor会导致缓存提交到数据库编辑会话(Edit Session) 使用编辑会话的优势 必须使用编辑会话的场景在Geodatabase编辑中使用编辑会话使用编辑会话的优势将编辑操作置于原子事务中,在所有的编辑提交之前发生错误时可以回滚Geodatabase 维护一个 Undo 和 Redo 栈,当一个编辑操作完成后, 可以使用UndoEditOperation
8、和 RedoEditOperation 来访问使用编辑会话编辑 ArcSDE Geodatabase 中的数据时,允许通过批 量提交来提升速度在多用户同时编辑 Geodatabase 中的数据时,编辑会话可以起到 隔离作用,一个编辑会话中的修改只有在该会话结束后才能反应到 Geodatabase中在编辑会话中 Geodatabase 维护行对象的单例性,即同一条记录 在一个编辑会话中只会被实例化一次,所有对该记录的访问都指向 相同的引用必须使用编辑会话的场景参与拓扑的要素类参与几何网络的要素类ArcSDE Geodatabase 中注册为版本的数据带有类扩展的对象或要素True不需要使用不需要
9、使用EditSessionFalse需要使需要使用用EditSession在Geodatabase 编辑中使用编辑会话StartEditing()Begins an edit sessionStartEditOperation()Begins an edit operationExecute edits Representing a Single transactionSave the edits?StopEditOperation()Savethe transactionAbortEditOperation()Cancelsthe transactionMore edits required
10、?Commit the Edit session?StopEditing(true)Commit the edit sessionStopEditing(false)Discards the editsessionYesYesNoNoYesNo使用编辑会话编辑ArcSDE Geodatabase中的非版本数 据MethodDBMS behaviorStartMultiuserEditing (esriMultiuserEditSessionMode.esriMESMNonVersi oned)Start a transactionStopEditing(true)Commit the tran
11、sactionStopEditing(false)Abort the transaction只只能是能是非非版版本本数数据据在编辑会话中编辑ArcSDE Geodatabase中的版本数据MethodDBMS behaviorStartMultiuserEditingStart a edit session (esriMultiuserEditSessionMode.esriMESMVersioned)StartEditOperation()Start a transaction StopEditOperation()Commit thetransactionStopEditing(true)
12、the edit session一个编一个编辑辑操作操作单元单元对对A应应bo一一r个个tE独独d立立itO事事p务务eration()Abort the transactionSave edits and stop使用使用编辑编辑会会话编话编辑辑ArcSDE Geodatabase中注中注册册为版为版本本的数的数据据时,时,注注意:意:只能编只能编辑辑注册注册为版为版本的数据本的数据多多个编个编辑辑会话会话同时同时编辑一编辑一个个版本版本,保,保存编辑存编辑结结果之果之前需前需要协调要协调不要不要在编在编辑辑会话会话中中执执行行DBMS的的DDL操作操作ArcSDE Geodatabase
13、版本数据编辑示例使用使用SearchCursor进进行行数数据据 更新时更新时注注意不意不要使要使用用 Recycling类类型型游标游标使用游标进行Geodatabase编辑新建要素更新要素新建要素新建要素的两种方式单个创建:IFeatureClass.CreateFeature() + IFeature.Store()批量创建:IFeatureCursor.InsertFeature(IFeatureBuffer)使用插入游标批量创建要素高效的使用插入游标使用插入游标批量创建要素使用插入游标注意事项插入游标是用来实现要素批量插入功能的,单个要素的编辑尽量不使用插入游标插入游标既可以在编辑会
14、话中使用,也可以在编辑会话外使用,当使用插入游标向复杂要素类插入新要素时必须将其置于编辑会话中独立的编辑操 作内:EditSessionEditOperation(InsertCursor)使用插入游标向复杂要素类中插入新要素时,其内部会调用Store方法;向简单要素类中插入新要素时不会调用Store方法,因此,依托Store方法触 发的事件将不会被触发,可以通过 IWorkspaceEditControl.SetStoreEventsRequired属性来强制其调用Store 方法,会降低效率调用插入游标的Flush方法时要捕捉异常效率对比测试场景:测试场景:从从本地本地File Geoda
15、tabase中读取数据,中读取数据,向向ArcSDE Geodatabase要素类中插入读取的数要素类中插入读取的数数据情况:数据情况:简简单单的线的线要要素素类类,2721089条记录条记录 测试环境:测试环境:硬硬件(件(T9600 CPU 4G内存)软件内存)软件(Windows 7 备备注:注:测测试试结结果果中中时间时间单单位位为为毫毫秒秒Oracle 11gArcGIS 10)Outside of edit sessionInside of edit sessionInsertCursorCreateFeature+ StoreInsertCursorCreateFeature+S
16、tore内存60M180M58M160M时间656919151183196455171237642高效地使用插入游标更新要素更新要素的两种方式单个更新:IFeatureClass.GetFeature(OID) + IFeature.Store()批量更新:IFeatureCursor.UpdateFeature(IFeature)使用游标实现要素批量更新删除要素使用游标实现要素批量更新ArcMapEngine(Simple)Engine(Complex)Inside edit sessionSearch CursorSearch CursorSearch CursorOutside edit
17、 sessionSearch CursorUpdate CursorSearch Cursor使用游标实现要素批量更新(Update Cursor)使用游标实现要素批量更新(Search Cursor)使用游标进行批量要素更新注意事项根据具体的应用环境与数据类型选择合适的游标类型使用Update Cursor时用UpdateFeature和DeleteFeature替代 Store和Delete方法使用Update Cursor时注意其位置有效性使用Search Cursor时选择No-Recycling类型使用游标更新复杂要素类时注意其作用范围(EditOperation)删除要素删除要素的
18、两种方式单个删除:IFeatureClass.GetFeature(OID) + IFeature.Delete()批量删除:使用Search Cursor 或 Update Cursor删除要素类中的所有要素Truncate方法使用注意事项: 只针对非版本的简单要素类使用 保证只有当前用户在连接到GeodatabaseGeodatabase 开发常开发常见见错误错误错误使用 Recycling 类型的游标正确使用Recycling类型游标求所有要素长度之和数据数据情况情况:简单简单的的线要线要素素类类,2721089条记录条记录测试测试环境环境:硬件硬件(T9600 CPU 4G内内存)软件
19、存)软件(Windows 7Oracle 11g ArcGIS 10)备备注注:测测试试结结果中果中时时间间单单位位为为毫毫秒秒RecyclingNo-RecyclingCPU48%55%Memory47680K269749KTime3961792649在循环中调用FindField方法使用GetFeature()与GetFeatures()数据数据情况情况:简单简单的的线要线要素素类类,2721089条记录条记录测试测试环环境境:硬硬件件(T9600 CPU 4G内内存存)软软件件(Windows 7Oracle 11g 测试测试场景场景:从所从所有有要素要素中中取取出出50000条要素条要素 备注:备注:测测试结试结果中果中时间单时间单位位为毫秒为毫秒ArcGIS 10)GetFeature()G
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 团员注册管理办法
- 团队跑步管理办法
- 园级资助管理办法
- 固阳退休管理办法
- 国企督查管理办法
- 国外队伍管理办法
- 安全应急装备产业分类指导目录(2025版)
- 2025至2030增强和虚拟现实软件和服务行业项目调研及市场前景预测评估报告
- 2025至2030宣传品行业项目调研及市场前景预测评估报告
- 2025至2030中国海外投资行业发展分析及投资前景与战略规划报告
- TCALC 003-2023 手术室患者人文关怀管理规范
- 复方氨基酸(19)丙谷二肽注射液-临床用药解读
- 微创外科进展课件
- 人教版小学英语PEP三至六年级单词默写纸(汉译英+英译汉)
- 甲状腺肿瘤消融治疗理论知识考核试题及答案
- 《手穴保健操》课件
- 广东省广州市白云区2023-2024学年九年级上学期期中物理试卷
- 上海交通大学学生生存手册
- 造林(绿化)工期计划安排及保证措施
- 柴油MSDS-安全技术说明书
- 国际数学与科学教育评价新动向-例析TIMSS 2023的主要特点
评论
0/150
提交评论