删除feature的几种方法,性能
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的几种方法,性能相关推荐
- C#中判断空字符串的3种方法性能分析【月儿原创】
C#中判断空字符串的3种方法性能分析 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/ 时间:2007.4.28 3种方法分别是:string ...
- C#中判断空字符串的3种方法性能分析
3种方法分别是:string a=""; 1.if(a=="") 2.if(a==String.Empty) 3.if(a.Length==0) 3种方法都是等 ...
- 动态修改dom node的两种方法性能比较
Created by Jerry Wang, last modified on Sep 25, 2014 测试代码: <html> <script src="C:\User ...
- java list 合并 重复的数据_Java ArrayList合并并删除重复数据3种方法
首页 > 基础教程 > 集合框架 > ArrayList类 Java ArrayList合并并删除重复数据3种方法 1. 通过List自带方法list.retainAll() Lis ...
- linux 批量删除进程的两种方法
linux批量删除进程的两种方法 介绍两种方法.要kill的进程都有共同的字串. [plain] kill -9 `ps -ef |grep xxx|awk '{print $2}' ` ki ...
- .NET深入学习笔记(2):C#中判断空字符串的4种方法性能比较与分析
偶然看到<C#中判断空字符串的3种方法性能分析 >作者:清清月儿 主页:http://blog.csdn.net/21aspnet/ 时间:2007.4.28 写的一 ...
- linux删除用户删不了怎么办,Linux下完全删除用户的两种方法
Linux操作 实验环境:Centos7虚拟机 首先创建一个普通用户 gubeiqing . [root@localhost ~]# useradd gubeiqing [root@localhost ...
- ArcGIS Engine中删除要素的几种方法总结
转自原文 ArcGIS Engine中删除要素的几种方法总结 [csharp] view plain copy print? /// <summary> /// 通过IFeature.De ...
- C#中判断空字符串的3种方法性能分析 1
C#中判断空字符串的3种方法性能分析 作者:杨义贤 主页:http://blog.csdn.net/lucky_yyx 时间:2007.4.29 3种方法分别是:string a=&qu ...
最新文章
- 牛客练习赛81 小Q与彼岸花 (分块+可持久化01trie)
- C语言中缺少link文件,如何在link文件中给某个C文件的bss分配单独的段?
- 5300亿参数,SOTA屠榜!最大NLP预训练模型新王登基,微软英伟达联手称霸
- 在MFC对话框中快速集成三维控件
- 直接载入内存中的DLL
- c# 解析gprmc数据_Windows下VLP16激光雷达数据解析
- 天谕手游里的NPC真的很好看,画风特别的靓,背景音乐是万茜唱的
- android p 第三方预装,android P 隐藏API对系统APP的影响
- 为什么中国开发不出流行的操作系统和编程语言呢?
- (王道408考研操作系统)第四章文件管理-第一节9:文件系统的层次结构
- JavaScript常见封装方法
- 进度图绘制十大注意事项
- (收藏)让你从骨子里爱上英文
- 人工智能之人工神经网络
- 庄子 泛若不系之舟,虚而遨游者也。
- TFN光时域反射仪,维修、安装网络的第一步!
- 运行docker run显示is already in use by container
- 光学成像系统中的像差
- mac苹果系统数据恢复软件恢复苹果电脑硬盘数据教程
- HashMap如何解决哈希冲突?
热门文章
- 刚给msn加上了对话自动翻译
- 正弦函数及其FFT变换(一)
- PHP获取当前文件的绝对路径
- Android逆向移花接木之添加AlertDialog
- 论文精读——CenterNet :Keypoint Triplets for Object Detection
- 【运行程序频繁自动更新怎么回事?】
- 软件怎样作用于硬件!!?
- tomcat服务器文件被清空,Tomcat文件自动删除问题
- Couldn't register com.zyg.ios.XXX with the bootstrap server. Error: unknown error code.
- JCreator Pro