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),加上进度条,这样界面很友好。

删除feature的几种方法,性能相关推荐

  1. C#中判断空字符串的3种方法性能分析【月儿原创】

    C#中判断空字符串的3种方法性能分析 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.4.28  3种方法分别是:string ...

  2. C#中判断空字符串的3种方法性能分析

    3种方法分别是:string a=""; 1.if(a=="") 2.if(a==String.Empty) 3.if(a.Length==0) 3种方法都是等 ...

  3. 动态修改dom node的两种方法性能比较

    Created by Jerry Wang, last modified on Sep 25, 2014 测试代码: <html> <script src="C:\User ...

  4. java list 合并 重复的数据_Java ArrayList合并并删除重复数据3种方法

    首页 > 基础教程 > 集合框架 > ArrayList类 Java ArrayList合并并删除重复数据3种方法 1. 通过List自带方法list.retainAll() Lis ...

  5. linux 批量删除进程的两种方法

    linux批量删除进程的两种方法 介绍两种方法.要kill的进程都有共同的字串. [plain]  kill -9 `ps -ef |grep xxx|awk '{print $2}' `    ki ...

  6. .NET深入学习笔记(2):C#中判断空字符串的4种方法性能比较与分析

    偶然看到<C#中判断空字符串的3种方法性能分析 >作者:清清月儿  主页:http://blog.csdn.net/21aspnet/           时间:2007.4.28 写的一 ...

  7. linux删除用户删不了怎么办,Linux下完全删除用户的两种方法

    Linux操作 实验环境:Centos7虚拟机 首先创建一个普通用户 gubeiqing . [root@localhost ~]# useradd gubeiqing [root@localhost ...

  8. ArcGIS Engine中删除要素的几种方法总结

    转自原文 ArcGIS Engine中删除要素的几种方法总结 [csharp] view plain copy print? /// <summary> /// 通过IFeature.De ...

  9. C#中判断空字符串的3种方法性能分析 1

    C#中判断空字符串的3种方法性能分析 作者:杨义贤 主页:http://blog.csdn.net/lucky_yyx       时间:2007.4.29  3种方法分别是:string a=&qu ...

最新文章

  1. 牛客练习赛81 小Q与彼岸花 (分块+可持久化01trie)
  2. C语言中缺少link文件,如何在link文件中给某个C文件的bss分配单独的段?
  3. 5300亿参数,SOTA屠榜!最大NLP预训练模型新王登基,微软英伟达联手称霸
  4. 在MFC对话框中快速集成三维控件
  5. 直接载入内存中的DLL
  6. c# 解析gprmc数据_Windows下VLP16激光雷达数据解析
  7. 天谕手游里的NPC真的很好看,画风特别的靓,背景音乐是万茜唱的
  8. android p 第三方预装,android P 隐藏API对系统APP的影响
  9. 为什么中国开发不出流行的操作系统和编程语言呢?
  10. (王道408考研操作系统)第四章文件管理-第一节9:文件系统的层次结构
  11. JavaScript常见封装方法
  12. 进度图绘制十大注意事项
  13. (收藏)让你从骨子里爱上英文
  14. 人工智能之人工神经网络
  15. 庄子 泛若不系之舟,虚而遨游者也。
  16. TFN光时域反射仪,维修、安装网络的第一步!
  17. 运行docker run显示is already in use by container
  18. 光学成像系统中的像差
  19. mac苹果系统数据恢复软件恢复苹果电脑硬盘数据教程
  20. HashMap如何解决哈希冲突?

热门文章

  1. 刚给msn加上了对话自动翻译
  2. 正弦函数及其FFT变换(一)
  3. PHP获取当前文件的绝对路径
  4. Android逆向移花接木之添加AlertDialog
  5. 论文精读——CenterNet :Keypoint Triplets for Object Detection
  6. 【运行程序频繁自动更新怎么回事?】
  7. 软件怎样作用于硬件!!?
  8. tomcat服务器文件被清空,Tomcat文件自动删除问题
  9. Couldn't register com.zyg.ios.XXX with the bootstrap server. Error: unknown error code.
  10. JCreator Pro