在什么情况下会出现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。