GIS系统数据是基础,想必大家在做ArcEngine二次开发的过程中都会遇到向MDB和SDE写入数据的工作,我们将会通过几个篇幅,从大数据量导入过程中的问题和解决方式入手带给大家一些实用的经验。
1.数据的写入和删除要使用IWorkspaceEdit.StartEditing来开启一个编辑流程,千万别草率的写入和删除。使用该接口,如果数据在处理过程中出现任何异常,可以不对操作结果进行保存编辑和结束编辑IWorkspaceEdit.StopEditing,这样能够保证你处理的数据不被破坏。
2.读取数据要释放游标和要素类,循环IFeatureCursor过程中要释放Feature,循环结束时释放IFeatureCursor。
while ((feature = featureCursor.NextFeature()) != null)
{ Marshal.ReleaseComObject(feature);//释放要素}Marshal.ReleaseComObject(featureCursor);//释放游标
3.有时会在导入过程中需要对原始数据进行加工和处理,那么可以考虑将SDE中大数据量的图层分批导入到MDB(Personal Geodatabase)中,在对MDB中的数据进行加工和处理后导入到新的图层中。数据导入一批就进行保存编辑然后再开始编辑,这样会更好的保证数据的导入成功率,如数据量在200万条执行一次导入成功率会比每次导入50万条的成功率低很多,如果为每个要素类导入时开启一个专用的gsrvr进程那么成功率将是最高的。分批处理和导入也会大幅提升速度。
4.在保持编辑后要手动调用垃圾回收机制,这样能够在数据保存后释放掉gsrvr进程,可以有效的避免gsrvr进程死锁。
GC.Collect(); //发起一轮全面的回收
下一篇会通过上述思路展开更细节的探讨,希望会对大家有所帮助。