.net 2.0尝试读取或写入受保护的内存.这通常指示其他内存已损坏. 50

.net4.0版本正常运行程序。就.net2.0版本提示错误!... .net 4.0版本正常运行程序。就.net 2.0版本提示错误! 展开
 我来答
天堂罪疠怡坽恋
2014-08-26 · 超过85用户采纳过TA的回答
知道答主
回答量:156
采纳率:88%
帮助的人:71.2万
展开全部
此类错误屡见不鲜了,特别是图像开发,Com组件操作时,不要期望本文能够给你一个明确的答复,只能给你提供解决问题的思路:
解决办法只有一种:慧眼视真或排除法,先看看排除的优先级吧:

1.如果你用了NativeCode的资源,例如:Com、ActiveX;
没有强制的释放方法,底层的com组件根据你进程调用组件的次数来控制对象的增加和释放(对象释放会延迟,com自身的问题)。
一般是调用强制垃圾回收或ao自带的回收对象的方法,效果不明显。
这种对象不释放的情况,通常出现在应用程序反复调用频率极高的情况下,调用间隔的时间小于对象回收的速度,将报这种错误。
通常是自己的程序写的机构不合理,才会产生这种情况。
自己在程序里强制释放COM资源,调用Marshal.ReleaseComObject()方法将不再使用的对象释放掉
并在可能出现异常的地方去Catch,并留下日志,转移此异常。

2.指示测试的可执行文件与 Windows 数据执行保护功能兼容。
调用dll的程序,在运行时会出现 “尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"
有关更多信息,请参见 /NXCOMPAT(与数据执行保护兼容)。
编译器中加入了对DEP的安全性检查,在编译完后的exe文件中取消NXCOMPAT位可解决该问题
editbin.exe /NXCOMPAT:NO myexe

3.排除环境因素:例如.net Fx 2.0和 .net Fx 2.0 SP2差距很大的,当然其他环境因素也好考虑在内。
一定要排除开发和部署环境差异引起的问题。

4.如果是突然出现这个问题,最好是回滚到之前的操作,重做这个操作,例如移除控件,再次添加;
反注册Com,重新注册; 如果你安装了其他插件,卸除这些插件再试一试。

5.程序本身的问题。例如:数据库访问达到最大的并发量,出现死锁。或频繁的写入和读取操作,c#的垃圾回收机制造成的,即变量的回收速度大于使 用的速度造成的,这样就需要从新设计算法。
追问
你这个回答我看见过。  
我说的时Framework 2.0 报错
4.0不报错
百度网友d6aee59
2014-08-27 · TA获得超过843个赞
知道小有建树答主
回答量:778
采纳率:0%
帮助的人:494万
展开全部
这表示有部分锁定内存的资源没有被释放或者解锁,一直在占用这这一部分内存,然而程序已经退出了,会报此错误
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
就等开学a2
2014-08-27 · 超过32用户采纳过TA的回答
知道答主
回答量:176
采纳率:25%
帮助的人:36.4万
展开全部
版本的问题,只能向下兼容,怎么能向上兼容呢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阳光的雷咩咩
2014-08-26 · TA获得超过1.4万个赞
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:7829万
展开全部
具体代码是什么,也可以留联系看看。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式