http://blog.csdn.net/lk103852503/article/details/6570748

修改一批要素的属性有多种方法,当数据量较大时,若选择不当可能会大大影响速度。

一、IRowBuffer 方法

此法适用于将一批数据更新为某一相同的属性。

IQueryFilter pFilter = new QueryFilterClass();
pFilter.WhereClause = "Z='T'";
pFilter.SubFields = "Z";
int nIndex = pFeatureClass.FindField("Z");
ITable pTable = pFeatureClass as ITable;
IRowBuffer pBuffer = pTable.CreateRowBuffer();
pBuffer.set_Value(nIndex, "TT");
pTable.UpdateSearchedRows(pFilter, pBuffer);
Marshal.ReleaseComObject(pFilter);

当所要更新的属性各不相同时,上述方法就不能用了。

二、逐条更新记录

这种方式中可有三种方法,如下:

(1)

for (int i = 0; i < pTable.RowCount(null); i++)
            {
                pRow = pTable.GetRow(i);
                pRow.set_Value(2, i + 6);
                pRow.Store();
            }

(2)

IFeatureCursor FCursor = pLayer.FeatureClass.Search(new QueryFilterClass(), false);
 IFeature feature = FCursor.NextFeature();

for (int i = 0; i < featureNum; i++)
            {

feature.set_Value(2, i);
                feature.Store();
                feature = FCursor.NextFeature();
            }

(3)

ICursor pCursor =pTable.Update(null, false);
            pRow = pCursor.NextRow();
            for (int i = 0; i < pTable.RowCount(null); i++)
            {
                pRow.set_Value(2, i + 6);
                pCursor.UpdateRow(pRow);
                pRow = pCursor.NextRow();

}
试验数据为320条记录,三种方法的运行时间为:法(1)为40297ms;法(2)34922ms为;法(3)为219ms.

可见运用IFeature和IRow的Store方法更新速度都很慢,用ICursor 的UpdateRow方法速度很快,分别是前两者效率的184倍、159倍!!完整测试代码如下:

IFeatureLayer pLayer = Utilities.GetLayerByName((string)cmbRegLayers.SelectedItem, m_mapControl) as IFeatureLayer;
            ITable pTable = pLayer.FeatureClass as ITable;
            int t = 0;

IFeatureCursor FCursor = pLayer.FeatureClass.Search(new QueryFilterClass(), false);
            IFeature feature = FCursor.NextFeature();
            int featureNum = pLayer.FeatureClass.FeatureCount(null);
            t = Environment.TickCount;
            for (int i = 0; i < featureNum; i++)
            {

feature.set_Value(2, i);
                feature.Store();
                feature = FCursor.NextFeature();
            }
            t = Environment.TickCount - t;
            MessageBox.Show(t.ToString());

t = Environment.TickCount;
            ICursor pCursor =pTable.Update(null, false);
            IRow pRow = pCursor.NextRow();
            for (int i = 0; i < pTable.RowCount(null); i++)
            {
                pRow.set_Value(2, i + 6);
                pCursor.UpdateRow(pRow);
                pRow = pCursor.NextRow();

}

t = Environment.TickCount - t;
            MessageBox.Show(t.ToString());

t = Environment.TickCount;
            for (int i = 0; i < pTable.RowCount(null); i++)
            {
                pRow = pTable.GetRow(i);
                pRow.set_Value(2, i + 6);
                pRow.Store();
            }

t = Environment.TickCount - t;
            MessageBox.Show(t.ToString());

Arcengine效率探究之二——属性的更新(转载)的更多相关文章

  1. 【转载】Arcengine效率探究之二——属性的更新

    文转载自hymyjl2010<Arcengine效率探究之二——属性的更新>   修改一批要素的属性有多种方法,当数据量较大时,若选择不当可能会大大影响速度. 一.IRowBuffer 方 ...

  2. Arcengine效率探究之一——属性的读取(转载)

    http://blog.csdn.net/lk103852503/article/details/6566652 在写一个对属性表的统计函数时,发现执行速度奇慢无比,百思不得其解,其实算法并不复杂,后 ...

  3. ArcGIS Engine效率探究——要素的添加和删除、属性的读取和更新

    ArcGIS Engine效率探究——要素的添加和删除.属性的读取和更新 来自:http://blog.csdn.net/freewaywalker/article/details/23703863 ...

  4. vue生命周期探究(二)

    vue生命周期探究(二) 转载自:https://segmentfault.com/a/1190000008923105 上一章我们介绍了vue的组件生命周期和路由勾子,这一章,让我们来看看在vue- ...

  5. 常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释)

    常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释) 一. 增 INSERT INTO 数据表(字段,字段,-) VALUES(值,值-); INSERT INTO emp(empno, ...

  6. fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map

    作者:buster2014 推荐:长安散人 fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map JSON字符串与Java对象的转换 1.将Java对象或Java ...

  7. 解决使用JPA时对象在set属性时更新了数据库问题

    https://www.jianshu.com/p/1100814ff54f 之前也遇到过一次这个问题,打印的日志中也可以看见update相关的sql语句,但当时不知道为什么会去自动更新,就用了别的方 ...

  8. vue 数组中嵌套的对象添加新属性--页面更新

    vue 数组中嵌套的对象添加新属性--页面更新:https://www.jianshu.com/p/8f0e5bb13735

  9. 支付宝防并发方案之"一锁二判三更新"

    每年支付宝在双11和双12的活动中,都展示了绝佳的技术能力.这个能力不但体现在处理高TPS量的访问,更体现在几乎不会出错,不会出现重复支付的情况,那这个是怎么做到的呢? 诚然,为了实现在高并发下仍不会 ...

随机推荐

  1. git 学习汇总

    生成gitignore 文件: https://gitignore.io/ git 版本回退 git reset --hard HEAD^ 上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然 ...

  2. Win10更新后真正可用VC++6版本

    1.首先,我并不支持继续用VC6,毕竟太老太老了...除了VS,如果只是学C,那你完全可以用其它一些工具...当然除非你也是像我一样被逼无奈. 2.本次找了N多个版本,问题就是Win10周年更新包后, ...

  3. wx.aui.AuiManager部分/布局翻译

    wx.aui.AuiManager wx.aui.AuiManager 是AUI框架类中的主要类 wx.aui.AuiManager管理于指定的wx.Frame相关联的窗口,通过使用窗口的wx.aui ...

  4. JS中 map, filter, some, every, forEach, for in, for of 用法总结

    本文转载自:http://blog.csdn.net/gis_swb/article/details/52297343 1.map 有返回值,返回一个新的数组,每个元素为调用func的结果. let ...

  5. php输出年份

    Copyright <?php echo date('Y');?> by Creditease Corp.All Right Reserved.

  6. mod_php和mod_fastcgi和php-fpm的介绍,对比和性能数据

    1.php中fastcgi和php-fpm是什么东西 最近在研究和学习php的性能方面的知识,看到了factcgi以及php-fpm,发现我对他们是少之又少的理解,可以说几乎是一无所知,想想还是蛮可怕 ...

  7. loadrunner中pacing的设置

    通常我们在谈到一个软件的“性能”的时候,首先想到的就是“响应时间”和“并发用户数”这两个概念.我们看到的性能需求经常都是这样定义的: “要求系统支持 100 个并发用户” 看到这样的性能需求,我们往往 ...

  8. 声明式API replica controller vs replica set 对比

    1.在命令式API中,你可以直接发出服务器要执行的命令,例如: “运行容器”.“停止容器”等. 在声明性API中,你声明系统要执行的操作,系统将不断向该状态驱动. 可以想象成手动驾驶和自动驾驶系统.( ...

  9. day50

    JS基础 一.JS语言介绍 1.概念 浏览器脚本语言 可以编写运行在浏览器上的代码程序 属于解释性.弱语言类型编程语言 2.组成 ES语法:ECMAScript.主要版本ES5和ES6 DOM:文档对 ...

  10. day08(补)

    今日学习内容 1.文件重写方法 2.函数基本知识 文件处理: 打开文件 读/写文件 关闭文件 文件指针移动,只有t模式下的read(n),n代表的字符个数其余都是以字节为单位 f.seek有两个参数( ...