ArcEngine,C#数据删除几种方法和性能比较
一、 几种删除方法代码
1. 查询结果中删除
复制代码
2. 更新游标删除
复制代码
3. 使用DeleteSearchedRows删除
复制代码
4. ExecuteSQL删除
复制代码
二、 测试性能和比较
1、 相同的数据条件,删除2000条记录
2、 测试代码
复制代码
3、测试情况
测试方法
第一次时间(单位ms)
第一次时间(单位ms)
一、 几种删除方法代码
1. 查询结果中删除
- private void Delete1(IFeatureClass PFeatureclass)
- {
- IQueryFilter pQueryFilter = new QueryFilterClass();
- pQueryFilter.WhereClause = "objectID<=" + DeleteNum;
- IFeatureCursor pFeatureCursor = PFeatureclass.Search(pQueryFilter, false); IFeature pFeature = pFeatureCursor.NextFeature();
- while (pFeature != null)
- {
- pFeature.Delete();
- pFeature = pFeatureCursor.NextFeature();
- }
- System.Runtime.InteropServices.Marshal.ReleaseComObject(pQueryFilter);
- }
2. 更新游标删除
- private void Delete2(IFeatureClass PFeatureclass)
- {
- IQueryFilter pQueryFilter = new QueryFilterClass();
- pQueryFilter.WhereClause = "objectID<=" + DeleteNum;
- IFeatureCursor pFeatureCursor = PFeatureclass.Update(pQueryFilter, false);
- IFeature pFeature = pFeatureCursor.NextFeature();
- while (pFeature != null)
- {
- pFeatureCursor.DeleteFeature();
- pFeature = pFeatureCursor.NextFeature();
- }
- System.Runtime.InteropServices.Marshal.ReleaseComObject(pQueryFilter);
- }
3. 使用DeleteSearchedRows删除
- private void Delete4(IFeatureClass PFeatureclass)
- {
- IQueryFilter pQueryFilter = new QueryFilterClass();
- pQueryFilter.WhereClause = "objectID<=" + DeleteNum;
- ITable pTable = PFeatureclass as ITable;
- pTable.DeleteSearchedRows(pQueryFilter);
- System.Runtime.InteropServices.Marshal.ReleaseComObject(pQueryFilter);
- }
4. ExecuteSQL删除
- private void Delete4(IFeatureClass PFeatureclass)
- {
- IDataset pDataset = PFeatureclass as IDataset;
- pDataset.Workspace.ExecuteSQL("delete from " + PFeatureclass.AliasName + " where objectid<=" + DeleteNum);
- }
二、 测试性能和比较
1、 相同的数据条件,删除2000条记录
2、 测试代码
- IFeatureLayer pFeatureLayer = axMapControl1.Map.get_Layer(0) as IFeatureLayer;
- IFeatureClass PFeatureClass = pFeatureLayer.FeatureClass;
- System.Diagnostics.Stopwatch MyWatch = new System.Diagnostics.Stopwatch();
- MyWatch.Start();
- Delete1(PFeatureClass)
- //Delete2(PFeatureClass);
- //Delete3(PFeatureClass);
- //Delete4(PFeatureClass);
- //Delete5(PFeatureClass);
- MyWatch.Stop();
- MessageBox.Show("删除时间:" + MyWatch.ElapsedMilliseconds.ToString() + "毫秒");
3、测试情况
测试方法
第一次时间(单位ms)
第一次时间(单位ms)