zoukankan      html  css  js  c++  java
  • ArcEngine数据删除几种方法和性能比较【转载】

    ArcEngine数据删除几种方法和性能比较【转载】

    转载保留版权://by yl landgis@126.com 2008.7.8
    来自:http://blog.csdn.net/yanleigis/archive/2008/07/09/2627649.aspx


    1、IFeatureCursor 游标查询后,遍历删除

    2、更新游标删除IFeatureCursor.DeleteFeature()

    3、ITable.DeleteSearchedRows删除

    4、 IDataset.Workspace.ExecuteSQL

     

    一、  几种删除方法代码

    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 landgis@126.com 2008.7.8
    来自:http://blog.csdn.net/yanleigis/archive/2008/07/09/2627649.aspx

  • 相关阅读:
    centos 下建用户 shell编程
    vmware centos下配置ip
    centos7下快速安装mysql
    CentOS-7.0.中安装与配置Tomcat-7的方法
    CentOS下安装JDK1.7
    CentOS6.5安装配置SVN
    Spring mvc 下Ajax获取JSON对象问题 406错误
    Freemarker中通过request获得contextPath
    java进阶书籍推荐
    致命错误:jemalloc/jemalloc.h:没有那个文件或目录
  • 原文地址:https://www.cnblogs.com/lauer0246/p/1292668.html
Copyright © 2011-2022 走看看