轉自原文 ArcEngine數據刪除幾種方法和性能比較
一、? 幾種刪除方法代碼
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);
?