代码改变世界

“尝试读取或写入受保护的内存”错误处理

2008-12-10 14:04  buru  阅读(637)  评论(0)    收藏  举报

最近一个项目是调用浏览器截图的,不断new 一个WebBrowser对象,然后用.net自带的dispose()释放资源。

结果运行程序抛出这个一个错误。

“底层的com组件根据你进程调用组件的次数来控制对象的增加和释放(对象释放会延迟,com自身的问题)。一般是调用强制垃圾回收或ao自带的回收对象的方法,效果不明显。
这种对象不释放的情况,通常出现在应用程序反复调用频率极高的情况下,调用间隔的时间小于对象回收的速度,将报这种错误。通常是自己的程序写的机构不合理,才会产生这种情况。

 解决方法是自己在程序里强制释放COM资源,调用Marshal.ReleaseComObject()方法将不再使用的对象释放掉。”

 

Code