pFeatureBuffer = pOutFeaCls.CreateFeatureBuffer();
                pFeatureCursor = pOutFeaCls.Insert(true);
                while (pfea != null)
                {
                    Application.DoEvents();
                    try
                    {
                        //裁剪要素,此处只做示例不裁减
                        IGeometry pGeom = pfea.ShapeCopy;
                        pFeatureBuffer.Shape = pGeom ;
                        pFeatureCursor.InsertFeature(pFeatureBuffer);
                    }
                    catch (Exception ex)
                    {
                        LogWrite(logpath, "裁剪图层要素出错,要素OID:" + pfea.OID + "    " + ex.Message);
                    }
 
                    pfea = pcur.NextFeature();
                }
               pFeatureCursor.Flush();
              //释放com
 
代码大概如上,大量循环时程序就报错了:HRESULT:0x80040239
 
第一反应是com对象未释放导致,于是把函数里所有创建的com对象全部用 ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject  释放,然后再跑程序,问题依旧。
 
于是开始网上搜索,度娘自然只会卖萌搜不到任何有用的,谷哥由于斯巴达封锁上不去,必须到esri论坛找。
 
只是在进行itopologicaloperator之前进行simplify的操作。  
试了下,所有临时geo全部处理下,仍然是这个错。

看这里:-2147220935(80040239)  http://bbs.esrichina-bj.cn/esri/viewthread.php?tid=71334
esriNetworkErrors Constants ([url=mkMSITStore:C:\Program%20Files\ArcGIS\DeveloperKit\Help\VB\esriGeoDatabase.chm::/GeoDatabase_library.htm]esriGeoDatabase[/url])

NETWORK_E_UPDATE_SESSION_IN_PROGRESS

似乎是指已有一个更新进程了,导致失败。

-2147220935 An update session is in progress.

FeatureCursor.Flush是完成更新执行的,看这里http://bbs.esrichina-bj.cn/esri/viewthread.php?tid=105480 5楼, 清理内存,确保将缓存中所有的信息写入图层文件,所以应该是这个问题。
 
再看这里http://bbs.esrichina-bj.cn/esri/viewthread.php?tid=108323,虽然只是个提问但是FeatureCursor.Flush 感觉解释得不错。
一个数据处理功能,开始用IFeatureBuffer方法插入数据,对IFeatureBuffer赋值后调用IFeatureBuffer.InsertFeature插入,但没有调用Flush,结果当数据库为SDE(oracle)时发现大概每300条就停顿一两秒,如果数据是FieldGDB则没此情况
google一番后,发现有部分例子采用了Flush,因此,我在InsertFeature之后又调用Flush,结果停顿情况没了
在AE的帮助文档中,对Flush的解释是Flush any outstanding buffered writes to the database.,直译为“任何优秀的缓冲冲洗写信给数据库。”。我理解是将outstanding的缓存(buffer)写到数据库里,outstanding不知道怎么理解。
另外,在SDE中,我试了每插入300条要素才调用一次Flush,结果又出现那种停顿的情况,那我想,是不是如果不手动调用Flush,系统也会自动调用,比如在缓存(buffer)满了的时候 
 
猜想是缓存太大未完全存进数据库即进行下次更新缓存操作,导致出现此问题。于是修改代码:
 pFeatureBuffer = pOutFeaCls.CreateFeatureBuffer();
                pFeatureCursor = pOutFeaCls.Insert(true);
                while (pfea != null)
                {
                    Application.DoEvents();
                    try
                    {
                        //裁剪要素,此处只做示例不裁减
                        IGeometry pGeom = pfea.ShapeCopy;
                        pFeatureBuffer.Shape = pGeom ;
                        pFeatureCursor.InsertFeature(pFeatureBuffer);
                        pFeatureCursor.Flush();
                    }
                    catch (Exception ex)
                    {
                        LogWrite(logpath, "裁剪图层要素出错,要素OID:" + pfea.OID + "    " + ex.Message);
                    }
 
                    pfea = pcur.NextFeature();
                }
              //释放com
 
只是把pFeatureCursor.Flush();放进循环内部,再测试,问题解决。
每循环一次写一次缓存,总体对性能基本无影响(个人测试)。
 
看了一下,论坛的几个帖子主要对拓扑出错,目前测试此函数拓扑正常,和拓扑无关。
 
希望对大家有用。

裁剪要素出现错误 :HRESULT:0x80040239的更多相关文章

  1. 对COM 组件的调用返回了错误 HRESULT E_FAIL

    .net ppt转pdf时报以下错误: 对COM 组件的调用返回了错误 HRESULT E_FAIL 在服务器端打开PPT,选项--另存为--PDF,发现PowerPoint报了个错误: “无法找到打 ...

  2. Additional information: 对 COM 组件的调用返回了错误 HRESULT E_FAIL

    1:Winform应用通过mshtml操作IE浏览器DOM时,第一次运行正常,点击第二次时错误信息如下 A first chance exception of type 'System.Runtime ...

  3. 解决:对COM 组件的调用返回了错误 HRESULT E_FAIL

    调用SHDOCVW(web浏览器) COM组件的时候,返回了错误 HRESULT E_FAIL.总结如下: 1. 在控制面板--->管理工具--->服务 中,开启Distributed T ...

  4. sqlserver数据导入问题:报错“对COM组件的调用返回了错误HRESULT E_FAIL”

    SQL server 2008,导出了两个sql文件. 打开第一个文件,没有问题,建好相应的数据库,运行脚本,即可导入. 第二个文件却遇到问题,始终报错“对COM组件的调用返回了错误HRESULT E ...

  5. Windows 7 安装.net framework 4.0 失败,错误HRESULT 0xc8000222解决办法

    今天在客服那里发现一个比较奇怪的错误,在客服机子上安装.NET Framework4.0时,出现如下错误:HRESULT 0xc8000222 百度了下原因,原来是win7自动更新造成的.原文网址:h ...

  6. EF Power Tools 参数错误 HRESULT:0x80070057 (E_INVALIDARG))

    数据库名称使用数字开头,使用EF Power Tools生成映射时,会提示:“参数错误. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))”. 解 ...

  7. vs2017添加引用出错:对COM组件的调用返回了错误HRESULT E_FAIL

    1.以管理员身份打开 Developer Command Prompt for VS 2017(vs2017开发人员命令提示符) 2.定位到你的vs2017的安装目录 例:E:\Program Fil ...

  8. VS2017 对com组件调用返回错误hresult e_fail

    解决步骤如下: 第一步: 第二步:进入VS2017 安装目录,如下(路径仅供参考) 执行:gacutil -i Microsoft.VisualStudio.Shell.Interop.11.0.dl ...

  9. SQLServer导入大sql文件报错 对 COM 组件的调用返回了错误 HRESULT E_FAIL。 (mscorlib)

    打开cmd执行(d:\script.sql为sql文件位置):  sqlcmd -S 127.0.0.1 -U sa -P sa -i d:\script.sql    From:https://ww ...

随机推荐

  1. ligerDialog的使用

    1.通过ViewBag来传值. @if (ViewBag.ReturnMessage != null) 2.脚本代码: 对话框设计与赋值问题. <script type="text/j ...

  2. WSTMall网站系统最新官方版

    WSTMall V1.0是在thinkphp 的经典版本3.2.2基础上进行优化开发的, TP 3.2.2不是thinkphp的一个最新的版本,却是thinkphp最金典的一个版本,正所谓站在巨人的肩 ...

  3. python3 linux下安装

    1.下载 https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz 2.安装 上传到linux服务器 #进入上传文件的目录 cd /app/pr ...

  4. python-面向对象进阶

    小总结: 面向对象的好处 更容易扩展,提高代码的使用效率,使代码组织性更强.更清晰,更适合复杂项目的开发 封装:把功能的实现细节封装起来,之暴露调用接口  多态:接口的继承 定义:  类  :  模板 ...

  5. Linux常用命令(二)

    2.2.其他权限管理命令 命令名称:chown 功能:更改文件目录或文件的所有者语法:chown[用户][文件或目录]命令名称:chgrp 功能:改变文件或目录的所属组语法:chgrp[用户][文件或 ...

  6. Oracle日期格式转换,tochar(),todate()

    Oracle日期格式转换 本文主要介绍Oracle中的日期转换. 1. 日期转化为字符串 (以2016年10月20日为例) select to_char(sysdate,'yyyy-mm-dd hh2 ...

  7. suid sgid sbit chattr lsattr

    suid 一般用于二进制可执行文件,suid代表当用户执行此二进制文件时,暂时具有此文件所有者的权限 chmod 4xxx binfile sgid 一般用于目录,sgid代表当其他用户在此目录下创建 ...

  8. JS中变量名和函数名重名

    今天骚凯问了一道变量名冲突的题目,感觉很有意思,顺便也复习一下预解析的一些知识,有不对的地方忘前辈大神指正,题目是这样的: var a=100; function a(){ console.log(a ...

  9. k-develop 在ros上面的应用

    sudo apt-get install kdevelop 根据wiki上面的ros 章节中,关于kdevelop的介绍,配置好环境即可. 导入工程时,选中src/src下面的章节,不过,需要注意去掉 ...

  10. 物联网平台设计心得:管中窥豹之HeartBeat

    前言 在写这篇文章之前,我曾对HeartBeat做过诸多的研究,也做过诸多的项目,在这些项目中,有客户端为了维持状态,而定时向服务端发送的HeartBeat:有服务端为了维持客户端连接状态而处理Hea ...