惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

云风的 BLOG
云风的 BLOG
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
IT之家
IT之家
Recent Announcements
Recent Announcements
B
Blog
D
Docker
V
V2EX
GbyAI
GbyAI
L
LangChain Blog
博客园 - Franky
U
Unit 42
T
The Blog of Author Tim Ferriss
A
About on SuperTechFans
博客园 - 【当耐特】
Google DeepMind News
Google DeepMind News
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Vercel News
Vercel News
博客园_首页
D
DataBreaches.Net
人人都是产品经理
人人都是产品经理
Y
Y Combinator Blog
量子位
Blog — PlanetScale
Blog — PlanetScale
罗磊的独立博客

博客园 - winzheng

[转]DBCC DBREINDEX重建索引提高SQL Server性能 算法,一个永恒的话题,挑战你的编程之美。 QQ群消息:友情提醒。 ObjectForScripting 的类必须对 COM 可见。请确认该对象是公共的,或考虑向您的类添加 ComVisible 属性。 编码原则十日谈 UML中几种类间关系:继承、实现、依赖、关联、聚合、组合的联系与区别 Is not a valid Win32 application. (Exception from HRESULT: 0x800700C1) 根据进程名称或者服务名称用WMI获取执行路径和参数 设计器加载程序未提供根组件,但没有指出原因 Web 无法启动调试疑难解析(待续) 检测到 ContextSwitchDeadlock 找不到可安装的 ISAM 之 C#读取VFP数据 .Net Remoting 入门教程-原理&&Hello 阴沟里翻船,浪费一个小时时间 一个肥皂泡的破灭(组图) 每周工作计划公布栏(2009.10.26-2009.10.31) SQL Server2005 常见错误及解决方案 一道算法引发的思考:编程之外,我们还要关注什么 System.InvalidOperationException: 缓冲操作当前正在进行中,无法释放 BufferedGraphicsContext。
程序出现异常"尝试读取或写入受保护的内存这通常指示其...
winzheng · 2009-08-11 · via 博客园 - winzheng

“尝试读取或写入受保护的内存这通常指示其他内存已损坏"。

System.AccessViolationException: Attempted to read or write protected memory.
This is often an indication that other memory is corrupt.
此类错误屡见不鲜了,特别是图像开发,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#的垃圾回收机制造成的,即变量的回收速度大于使 用的速度造成的,这样就需要从新设计算法。

态度决定一切,技术改变生活作者:winzheng                                                                                                                                            
出处:http://cnblogs.com/winzheng                                                                                                      
本文为原创作品,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

更多参考 http://msdn.microsoft.com/zh-cn/library/ms164911%28VS.80%29.aspx