VS中OutOfMemoryException 异常问题

来源:互联网 发布:淘宝下拉框词一键提取 编辑:程序博客网 时间:2024/06/05 10:14

在什么情况下会出现OutOfMemonryException呢 ?引<<.net框架程序设计修订版>>的话: 在我们试图新建一个对象时,而垃圾收集器又找不到任何可用内存时被抛出,这种情况下我们是可以捕获该异常的,另一种情况是,CLR需要内存时,而却系统却不能提供,也会抛出该异常,但此时,我们的应用程序是不能捕获该错误的

<<.net框架程序设计修订版>>把OutOfMemoryException异常列为开发人员几乎从来不会考虑的隐含假设,也就是说,很多开发人员根本不考虑该异常发生的可能并做出处理,起码我在我开发的系统里并没有专门考虑这个异常

我现在考虑的问题是: 
1,如果是新建对象找不到可用内存抛出改异常,那么在HttpModule的Application_Error事件能否捕获改错误 ?我的想法是,即使可以捕获,也是不能得到处理的,因为自定义的异常处理仍然需要内存来运行,所以无论能否捕获,都不能做友好处理

2,如果CLR找不到需要的内存情况下抛出改异常,那就更不能处理了

也就是说,几乎在任何情况下,我们都无法在系统出现OutOfMemoryException异常提供友

好界面 ?

 

 

代码编写方面的注意问题  

1.System.Drawing方面的类使用问题

System.Drawing用到了很多系统的资源和非托管代码,所以使用的时候要特别小心,注意内存泄漏(Memory Leak)例如:BitMap.MakeTransparent方法的使用问题:

http://www.dotnet247.com/247reference/msgs/40/202528.aspx

2.new byte[]问题

处理流的时候常常会用到new一个大的byte数组。但在多用户情况下会消耗大量的内存。正确的做法应该是定义一个比较小的byte数组做为缓存,然后循环使用。如在我们的程序中,有些地方使用不当,当图片(或附件)过大或过多的时候, new byte[length]就有可能消耗过多的内存。

3.  避免使用大对象数组或小对象大数组

编程时同样要重视效率问题(包括内存占用问题)。

4.Com接口调用是要注意释放对象。

原创粉丝点击