天天看點

ArcEngine,C#删除資料幾種方法和性能比較

一、  幾種删除方法代碼

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)

1

 5214ms

 5735ms

2

 299ms

 290Ms

3

 59ms

 28ms

4

 26ms

 26ms

三、  結論

1、         使用ExecuteSQL删除最快,資料庫的效率最高。

2、         DeleteSearchedRows和ExecuteSQL屬于批量删除,性能較優。

3、         查詢結果中删除,速度最慢,如果你使用這種方法,建立你馬上修改你的程式,因為你在浪費時間。

4、       小資料量記錄數小于500000條,請使用DeleteSearchedRows或ExecuteSQL,否則使用更新遊标删除(方法2),加上進度條,這樣界面很友好。

轉載保留版權://by yl [email protected] 2008.7.8

本篇文章來源于 GIS空間站 轉載請以連結形式注明出處 網址:http://www.gissky.net/Article/1644.htm

轉載于:https://www.cnblogs.com/jiejie/archive/2012/05/16/2504109.html