Arcengine效率探究之二——属性的更新(转载)
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效率探究之二——属性的更新(转载)的更多相关文章
- 【转载】Arcengine效率探究之二——属性的更新
文转载自hymyjl2010<Arcengine效率探究之二——属性的更新> 修改一批要素的属性有多种方法,当数据量较大时,若选择不当可能会大大影响速度. 一.IRowBuffer 方 ...
- Arcengine效率探究之一——属性的读取(转载)
http://blog.csdn.net/lk103852503/article/details/6566652 在写一个对属性表的统计函数时,发现执行速度奇慢无比,百思不得其解,其实算法并不复杂,后 ...
- ArcGIS Engine效率探究——要素的添加和删除、属性的读取和更新
ArcGIS Engine效率探究——要素的添加和删除.属性的读取和更新 来自:http://blog.csdn.net/freewaywalker/article/details/23703863 ...
- vue生命周期探究(二)
vue生命周期探究(二) 转载自:https://segmentfault.com/a/1190000008923105 上一章我们介绍了vue的组件生命周期和路由勾子,这一章,让我们来看看在vue- ...
- 常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释)
常用sql语句总结(二)(更新数据,序列,创建数据表,约束,注释) 一. 增 INSERT INTO 数据表(字段,字段,-) VALUES(值,值-); INSERT INTO emp(empno, ...
- fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map
作者:buster2014 推荐:长安散人 fastJson在java后台转换json格式数据探究(二)--处理数组/List/Map JSON字符串与Java对象的转换 1.将Java对象或Java ...
- 解决使用JPA时对象在set属性时更新了数据库问题
https://www.jianshu.com/p/1100814ff54f 之前也遇到过一次这个问题,打印的日志中也可以看见update相关的sql语句,但当时不知道为什么会去自动更新,就用了别的方 ...
- vue 数组中嵌套的对象添加新属性--页面更新
vue 数组中嵌套的对象添加新属性--页面更新:https://www.jianshu.com/p/8f0e5bb13735
- 支付宝防并发方案之"一锁二判三更新"
每年支付宝在双11和双12的活动中,都展示了绝佳的技术能力.这个能力不但体现在处理高TPS量的访问,更体现在几乎不会出错,不会出现重复支付的情况,那这个是怎么做到的呢? 诚然,为了实现在高并发下仍不会 ...
随机推荐
- Github的一般用法
写了这么多年代码,源代码版本管理从一开始的没有后来的VSS,CVS,到现在一直在使用的SVN,但这些都是集中式的版本管理. 而分布式的版本管理还没有使用过. 今天看了看Github,研究一下怎么使用G ...
- 题解 P1312 【Mayan游戏】
题面 过长已遮挡 题意 体面已经陈述题意(这题没有考语文阅读理解) 题解 ** 我还记得我曾经给自己找的锅,给某些人讲课的时候说过一句话:体面越长的题,越简单.** 这句话没有错,我会用接下来解决这道 ...
- 面向对象程序设计_Task7_Summary
Summary of the ... 题目链接:第七次作业 终于还是迎来了这学期的最后一次作业,唠叨话还是放最后说,先说说计算器这玩意儿吧 贯穿了整个学期的计算器,要是让我对自己做个评价,顶多只是还好 ...
- Spring线程池配置模板设计(基于Springboot)
目录 线程池配置模板 基础的注解解释 常用配置参数 配置类设计 线程池使用 ThreadPoolTaskExecutor源码 线程池配置模板 springboot给我们提供了一个线程池的实现,它的底层 ...
- JQuery 为radio赋值问题
今天用jquery 为radio赋值,从百度查了一下方法: $("input[name='radioName'][value=2]").attr("checked&quo ...
- Scala学习之路 (一)Scala的安装
1.Scala下载 版本选择,看spark官网 http://spark.apache.org/docs/latest/ spark2.3.0版本是用2.11版本的Scala进行开发的,所以此处下载S ...
- layui小封装方法
//打开加载动画function LayerLoad() { layui.use('layer', function () { var layer = layui.layer; layer.load( ...
- vagrant特性——基于docker开发环境(docker和vagrant的结合)-4-简单例子-有问题
运行一个十分简单的例子: Vagrant.configure() do |config| config.vm.provider "docker" do |d| d.image = ...
- leetcode709—To Lower Case
Implement function ToLowerCase() that has a string parameter str, and returns the same string in low ...
- ThinkCenter安装CentOS7
重启电脑按F12选择从光盘启动: 选择install CentOS7,并按“E”键 进行编辑 编辑后,并按Ctrl+X 查看并找到你需要的盘符名称,如:sr0:随后强制重启电脑. 并修改如下: 按Ct ...