一、AE 向已存在的要素类中添加字段
 链接:  AE 向已存在的要素类中添加字段

在向已存在的要素类中添加字段的时候,需要用到ICLASS接口。于是,进一步的调整代码如下,问题得以解决

static void AddFiled(IFeatureClass pFC,string name)
{
DeleteFile(pFC, name);
IFields pFields = pFC.Fields;
IClass pClass = pFC as IClass;
IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;
IField pField = new FieldClass();
IFieldEdit pFieldEdit = pField as IFieldEdit;
pFieldEdit.Name_2 = name;
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger;
pClass.AddField(pField);
}

直接添加到Ifields是不成功的

static void AddFiled(IFeatureClass pFC,string name)
{
IFields pFields = pFC.Fields;
IFieldsEdit pFieldsEdit = pFields as IFieldsEdit;
IField pField = new FieldClass();
IFieldEdit pFieldEdit = pField as IFieldEdit;
pFieldEdit.Name_2 = name;
pFieldEdit.Type_2 = esriFieldType.esriFieldTypeInteger;
pFields.AddField(pField);
}

二、AE高效处理
2.1属性高效处理
 链接:属性的更新

运用IFeature和IRow的Store方法更新速度都很慢,用ICursor 的UpdateRow方法速度很快,分别是前两者效率的184倍、159倍!!

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();
}

大量数据时不建议使用以下方式

//方法一:
feature.set_Value(2, i);
feature.Store();

//方法二:
ITable pTable = pLayer.FeatureClass as ITable;
IRow pRow = pTable.GetRow(i);
pRow.set_Value(2, i + 6);

2.2批量删除要素
///<summary>
///快速删除某featurelayer中所有feature
///</summary>
///<param name="pLayer">操作的涂层</param>
///<remarks>该方法可以给一个queryfilter,进行删除符合条件的features</remarks>
public static void DeleteAllFeatures(IFeatureClass featCls, IQueryFilter queryFilter)
{
ITable pTable = featCls as ITable;
pTable.DeleteSearchedRows(queryFilter);
}

2.3快速批量插入要素
使用IFeatureBuffer
public static void InsertFeaturesUsingCursor(IFeatureClass featureClass, List<
IGeometry> geometryList)
{

//using (ComReleaser comReleaser = new ComReleaser())
//{
// Create a feature buffer.
IFeatureBuffer featureBuffer = featureClass.CreateFeatureBuffer();
//comReleaser.ManageLifetime(featureBuffer);

// Create an insert cursor.
IFeatureCursor insertCursor = featureClass.Insert(true);
//comReleaser.ManageLifetime(insertCursor);

// All of the features to be created are classified as Primary Highways.
int typeFieldIndex = featureClass.FindField("TYPE");
featureBuffer.set_Value(typeFieldIndex, "Primary Highway");
foreach (IGeometry geometry in geometryList)
{
// Set the feature buffer's shape and insert it.
featureBuffer.Shape = geometry;
insertCursor.InsertFeature(featureBuffer);
}

// Flush the buffer to the geodatabase.
insertCursor.Flush();
// }
}

三、AE ArcEngine 尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
链接: 【转】.NET+AE开发中常见几种非托管对象的释放

今天在开发时遇到一个问题:" 未处理 System.AccessViolationException Message="尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"

这通常指示其他内存已损坏。不知大家遇到过没有,这种错误是由于用户反复写入或打开文件,

最终使得内存资源没有及时释放导致此错误。这种错误是无法跟踪的,必须强制释放!

没有强制的释放方法,底层的com组件根据你进程调用组件的次数来控制对象的增加和释放(对象释放会延迟,

com自   身的问题)。一般是调用强制垃圾回收或ao自带的回收对象的方法,效果不明显。解决方法如下:

1.将IIS重新启动。(我是按此方法解决的。)

2.关闭VS进程,退出VS2005.

3.上述方法若不行的话,可以自己在程序里强制释放COM资源,调用Marshal.ReleaseComObject()方法将不再使用的对象释放掉。
————————————————
版权声明:本文为CSDN博主「kone666」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kone0611/article/details/68923980

ArcEngine开发_添加字段,数据删除,插入,更新细节的更多相关文章

  1. MySQL添加字段和删除字段

    MySQL添加字段应该如何实现呢?这是很多刚刚接触MySQL数据库的新人都提到过的问题,下面就为您介绍MySQL添加字段和删除字段的方法,希望对您能有所启迪. MySQL添加字段: alter tab ...

  2. mysql 添加字段、删除字段、调整字段顺序

    用过MySQL的朋友,可能都在使用phpMyAdmin,我从2003年开始使用,感觉那东西适合远程mysql管理,并 不适合单机.单数据库的管理操作,特别是开发使用. 给家推荐一个软件管理mysql数 ...

  3. mysql 添加字段、删除字段、调整字段顺序 转

    ALTER TABLE — 更改表属性添加字段: alter table `user_movement_log`Add column GatewayId int  not null default 0 ...

  4. oracle基于3种方法的大数据量插入更新

    过程插入更新的3种方法: a.逐条检查插入或更新,同时执行插入或更新 b.逐条merge into(逐条是为了记录过程日志与错误信息) c.基于关联数组的检查插入.更新,通过forall批量sql执行 ...

  5. 使用GreenDao 添加字段,删除表,新增表操作

    GreenDao 给我个人感觉 比一般的ORM框架要好很多,虽然说上手和其他的比起来,较复杂,但是如果使用熟练以后,你会爱上这个框架的 用这些ORM 框架给我的感觉都是,当升级时,都需要进行数据库所有 ...

  6. Android 使用GreenDao 添加字段,删除表,新增表操作

    GreenDao 给我个人感觉 比一般的ORM框架要好很多,虽然说上手和其他的比起来,较复杂,但是如果使用熟练以后,你会爱上这个框架的 用这些ORM 框架给我的感觉都是,当升级时,都需要进行数据库所有 ...

  7. oracle 创建表、删除表、添加字段、删除字段、表备注、字段备注、修改表属性

    1.创建表 create table 表名( classid number() primary key, 表字段 数据类型 是否允许为空(not null:不为空/null:允许空) 默认值(defa ...

  8. DB2 建表,添加字段,删除字段,修改字段等常用操作

    转载:http://blog.sina.com.cn/s/blog_67aaf4440100v01p.html,稍作修改. --创建数据库 create database Etp; --连接数据库 c ...

  9. Alter的用法(添加字段,删除字段,修改字段名)

    1.在表emp中新增字段sexy(性别) alter table emp add sexy varchar2(2); 新增多个字段cxx 和shoneworn alter table emp add  ...

随机推荐

  1. vue实例之组件开发:图片轮播组件

    一.普通方式: 其中,index是关键. <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  2. springboot中spring.profiles.include的妙用

    我们在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发.测试.生产等.其中每个环境的数据库地址.服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改 ...

  3. javascript中的正确错误处理------------引用

    JavaScript的事件驱动机制让JavaScript更加丰富,浏览器好比就是一个事件驱动的机器,错误也是一种事件.当一个错误发生时,一个事件就在某个点抛出. 解释起来就是,当发生错误时,JavaS ...

  4. 一个3D正方体

    一个小例子,3D的正方体 <!DOCTYPE html> <html oncontextmenu=self.event.returnValue=false onselectstart ...

  5. vim文本编辑器的用法

    vi是一个命令行界面的文本编辑器: vim是vi的改进版: vim不仅有文本编辑:还有文本处理.代码编辑等功能:   1.VIM简介 vim 命令可启动vim编辑器: 一般 vim 文件路径 来使用: ...

  6. noi.ac#458 sequence

    题目链接:戳我 蒟蒻的第一道子序列自动机! 给定两个01串A,B,求一个最短的01串,要求C不是A,B的子序列.要求如果同样短,输出字典序最小的. 那么我们先构建A,B两个串的子序列自动机.然后我们设 ...

  7. webpack4 单入口文件配置 多入口文件配置 以及常用的配置

    单入口文件配置 webpack.config.js const path = require('path'); const HtmlWebpackPlugin = require('html-webp ...

  8. MySQL_(Java)使用preparestatement解决SQL注入的问题

    MySQL_(Java)使用JDBC向数据库发起查询请求 传送门 MySQL_(Java)使用JDBC创建用户名和密码校验查询方法 传送门 MySQL数据库中的数据,数据库名garysql,表名gar ...

  9. C++入门经典-例7.3-析构函数的调用

    1:析构函数的名称标识符就是在类名标识符前面加“~”.例如: ~CPerson(); 2:实例代码: (1)title.h #include <string>//title是一个类,此为构 ...

  10. Java内存缓存-通过Map定制简单缓存

    缓存 在程序中,缓存是一个高速数据存储层,其中存储了数据子集,且通常是短暂性存储,这样日后再次请求此数据时,速度要比访问数据的主存储位置快.通过缓存,可以高效地重用之前检索或计算的数据. 为什么要用缓 ...