代码改变世界

如何避免System.OutOfMemonryException异常

2010-11-03 14:27  田志良  阅读(2090)  评论(0编辑  收藏  举报

  在什么情况下会出现OutOfMemonryException呢?第一种情况:在试图新建一个对象时,垃圾收集器找不到任何可用内存,会抛出该异常,这种情况,我们是可以捕获该异常的;另一种情况是:CLR需要内存,而系统却不能提供,也会抛出该异常, 但此时,应用程序不能捕获该异常。

 

  第一种情况主要是由于过多使用托管内存导致的,在什么情况下会过多使用托管内存呢?  

  1. 将大型数据集读入内存中。   

  2.创建过多的缓存条目。   

  3. 上载或下载大文件。   

  4. 在分析文件时过多地使用正则表达式或字符串。   

  5. 过多的视图状态。   

  6. 会话状态中有过多的数据或者会话过多。   

  7.创建线程过多。

 

    下面我们来谈谈第二种情况。对于Win32操作系统,一个进程所能占用的所有内存空间只有2G。当进程占用的内存达到2G时,会引发OutOfMemoryException异常,进程崩溃。怎样扩大一个进程所占用的内存空间呢?可选的解决方法有两个: 

  1、使用/3GB模式启动计算机,方法: http://technet.microsoft.com/zh-cn/library/bb124810%28EXCHG.65%29.aspx
  2、使用Windows Server 2003 64bits Edition。