ArcEngine中出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”报错 学习笔记

本文主要是介绍ArcEngine中出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”报错 学习笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ArcEngine开发中出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”错误

在项目开发过程中,使用了要素的游标进行数据查询,在数据查询进行到一半的时候,系统报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”,在网上搜了一下问题,基本都是说“循环多次打开对象,导致内存没有及时释放。”的原因,需要将COM对象释放掉。

问题:
这是我游标代码部分,在游标中我循环调用了“getValueByOtherFeatureClass”方法,于是在这里我猜测,是这个方法循环调用太多,导致对象没有及时释放导致的内存溢出。(因为getValueByOtherFeatureClass这个方法里面也用了游标Cursor,所以能基本确认是这个问题)
在这里插入图片描述
解决方法:

由于在getValueByOtherFeatureClass方法我也用到了游标,故我在方法中添加“Marshal.ReleaseComObject”用于释放对象。每次调用完getValueByOtherFeatureClass方法,我都将该方法中的“IFeatureCursor 、IFeature、ISpatialFilter ”三个对象释放掉。这样的话,每次调用getValueByOtherFeatureClass方法,之前创建的对象都释放掉了,故多次循环不会出现报错!
(本文仅为自己AE开发过程中的学习笔记,大佬勿喷)

强调:
Marshal.ReleaseComObject(pMatchDataFeatureCursor);
Marshal.ReleaseComObject(pMatchDataFeature);
Marshal.ReleaseComObject(pSpatialFilter);
是关键!!!!

private string getValueByOtherFeatureClass(IFeatureClass pMatchDataFeatureClass,string matchDataFiled, string transDataFiled, string matchValue){//①遍历要素数据 ==》pDataFeatureClass// 创建polyline空间查询器ISpatialFilter pSpatialFilter = new SpatialFilter();pSpatialFilter.WhereClause = matchDataFiled + "=" +"\'" + matchValue + "\'";//创建Feature要素游标,根据pSpatialFilter条件进行数据查询IFeatureCursor pMatchDataFeatureCursor = pMatchDataFeatureClass.Search(pSpatialFilter, true);IFeature pMatchDataFeature = pMatchDataFeatureCursor.NextFeature();while(pMatchDataFeature != null){int transDataIndex = pMatchDataFeature.Fields.FindField(transDataFiled);string transValue = pMatchDataFeature.Value[transDataIndex].ToString();//释放arcengine中的COM对象  ==及时处理COM对象,否则会报错!!!Marshal.ReleaseComObject(pMatchDataFeatureCursor);Marshal.ReleaseComObject(pMatchDataFeature);Marshal.ReleaseComObject(pSpatialFilter);return transValue;}//释放arcengine中的COM对象Marshal.ReleaseComObject(pMatchDataFeatureCursor);Marshal.ReleaseComObject(pSpatialFilter);return null;}

这篇关于ArcEngine中出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”报错 学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1032859

相关文章

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

springboot报错Invalid bound statement (not found)的解决

《springboot报错Invalidboundstatement(notfound)的解决》本文主要介绍了springboot报错Invalidboundstatement(not... 目录一. 问题描述二.解决问题三. 添加配置项 四.其他的解决方案4.1 Mapper 接口与 XML 文件不匹配

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

解决Java中基于GeoTools的Shapefile读取乱码的问题

《解决Java中基于GeoTools的Shapefile读取乱码的问题》本文主要讨论了在使用Java编程语言进行地理信息数据解析时遇到的Shapefile属性信息乱码问题,以及根据不同的编码设置进行属... 目录前言1、Shapefile属性字段编码的情况:一、Shp文件常见的字符集编码1、System编码

利用Python实现添加或读取Excel公式

《利用Python实现添加或读取Excel公式》Excel公式是数据处理的核心工具,从简单的加减运算到复杂的逻辑判断,掌握基础语法是高效工作的起点,下面我们就来看看如何使用Python进行Excel公... 目录python Excel 库安装Python 在 Excel 中添加公式/函数Python 读取

关于Docker Desktop的WSL报错问题解决办法

《关于DockerDesktop的WSL报错问题解决办法》:本文主要介绍关于DockerDesktop的WSL报错问题解决办法的相关资料,排查发现是因清理%temp%文件夹误删关键WSL文件,... 目录发现问题排查过程:解决方法其实很简单:重装之后再看就能够查到了:最后分享几个排查这类问题的小www.cp

Pycharm安装报错:Cannot detect a launch configuration解决办法

《Pycharm安装报错:Cannotdetectalaunchconfiguration解决办法》本文主要介绍了Pycharm安装报错:Cannotdetectalaunchconfigur... 本文主要介绍了Pycharm安装报错:Cannot detect a launch configuratio

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx