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

相关文章

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

基于Python实现读取嵌套压缩包下文件的方法

《基于Python实现读取嵌套压缩包下文件的方法》工作中遇到的问题,需要用Python实现嵌套压缩包下文件读取,本文给大家介绍了详细的解决方法,并有相关的代码示例供大家参考,需要的朋友可以参考下... 目录思路完整代码代码优化思路打开外层zip压缩包并遍历文件:使用with zipfile.ZipFil

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

使用Python将JSON,XML和YAML数据写入Excel文件

《使用Python将JSON,XML和YAML数据写入Excel文件》JSON、XML和YAML作为主流结构化数据格式,因其层次化表达能力和跨平台兼容性,已成为系统间数据交换的通用载体,本文将介绍如何... 目录如何使用python写入数据到Excel工作表用Python导入jsON数据到Excel工作表用

解决SpringBoot启动报错:Failed to load property source from location 'classpath:/application.yml'

《解决SpringBoot启动报错:Failedtoloadpropertysourcefromlocationclasspath:/application.yml问题》这篇文章主要介绍... 目录在启动SpringBoot项目时报如下错误原因可能是1.yml中语法错误2.yml文件格式是GBK总结在启动S