如何处理OutOfMemoryException异常 ?


今天在浏览CSDN的网站,出现了上图的错误,如果没有记错的话,这两个错误我经常都能碰到,在这里我不想说CSDN现在如何失去人心的大话题,而是想和大家探讨如何解决这两个问题(这里只考虑web app),以便在自己的系统中避免这种不友好,甚至会"吓坏"客户的界面的出现

一,运行时错误
首先程序的异常,甚至错误是在所难免的,但当系统出现异常时,应该提供给用户一个友 好的界面,并简单说明原因,对这个问题,我一般的解决办法是
<customErrors mode="Off" /> 这里可以不用配置
然后在HttpModule的Application_Error事件中检测所有Error,并跳转到指定友好页面 另外也可以在所有页面的基类的Page_Error事件中检测,并跳转到指定友好页面,ASP.NET forums提供的解决方案,我觉得已经很优秀了,博客堂的宝玉提供这方面的很好的介绍

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

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

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

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

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

好界面 ?

大家能否讨论一下,提供你的解决方案 ?
这里有一个不错的解决tips

posted @ 2005-05-05 21:19  kwklover  阅读(49775)  评论(11编辑  收藏  举报