惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
Google DeepMind News
Google DeepMind News
S
SegmentFault 最新的问题
Project Zero
Project Zero
D
DataBreaches.Net
I
InfoQ
L
Lohrmann on Cybersecurity
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
酷 壳 – CoolShell
酷 壳 – CoolShell
Stack Overflow Blog
Stack Overflow Blog
The Register - Security
The Register - Security
Recorded Future
Recorded Future
Vercel News
Vercel News
博客园 - 司徒正美
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
I
Intezer
The Hacker News
The Hacker News
F
Fortinet All Blogs
Microsoft Azure Blog
Microsoft Azure Blog
P
Proofpoint News Feed
Help Net Security
Help Net Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Scott Helme
Scott Helme
T
Threatpost
爱范儿
爱范儿
N
Netflix TechBlog - Medium
D
Docker
云风的 BLOG
云风的 BLOG
C
Cisco Blogs
K
Kaspersky official blog
H
Help Net Security
S
Secure Thoughts
T
Threat Research - Cisco Blogs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
Security @ Cisco Blogs
Cyberwarzone
Cyberwarzone
N
News and Events Feed by Topic
G
Google Developers Blog
Forbes - Security
Forbes - Security
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
B
Blog
Google DeepMind News
Google DeepMind News
Recent Announcements
Recent Announcements
Simon Willison's Weblog
Simon Willison's Weblog
S
Securelist
P
Privacy International News Feed
Spread Privacy
Spread Privacy
The Last Watchdog
The Last Watchdog

博客园 - 帅死活该

Flex各类型坐标转换(全局、本地、内容坐标间转换) Oracle Spatial中的空间索引 [转] ORACLE纯SQL实现多行合并一行[转] Oracle提供的序号函数 FLEX动态创建事件 自定义组件开发 第二节 MXML组件开发 Flex项目调试及日志记录 Flex或Flash的跨域访问的解决方案 - 帅死活该 - 博客园 组件服务-计算机-我的电脑右键无属性,组件服务打不开 FLEX中使用BitmapFill的source属性指定SVG类文件 - 帅死活该 - 博客园 [转]ArcSDE数据被锁定后的解锁方法 ArcGIS server如何将自己的小地图叠加到Google maps或者Virtual Earth上[转] 一个ArcGIS网络分析的最短路径例子||A Network Analyst Shortest Route of ArcGIS[转] ArcGIS的网络分析[转] Flex动画效果与变换(三)[转] Flex的动画效果与变换!(二)[转] Flex动画效果与变换(一)[转] Microsoft 解决方案框架 — MSF 项目管理准则 v. 1.1[转] 如何在Silverlight中与HTML DOM交互
ArcEngine数据删除几种方法和性能比较[转] - 帅死活该 - 博客园
帅死活该 · 2010-02-03 · via 博客园 - 帅死活该

一、 几种删除方法代码

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