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

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

实际上,在ASP.NET Web服务器上,ASP.NET所能够用到的内存,通常不会等同于所有的内存数量。在machine.config (Windows XP,  C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config ; Windows 2003, C:\WINNT\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config ) 配置文件中, 配置节<processModel>中有一个属性“memoryLimit” (详见:processModel Element in Machine.config),这个属性的值是一个百分值,默认为“60”,即指定了ASP.NET进程(在任务管理器中大家就可以看到ASP.NET的进程,IIS5中为aspnet_wp,IIS6中为w3wp)能够使用所有物理内存的60%。当ASP.NET使用的内存量超过这个限额时,IIS会开始自动回收(recycle)进程(有的资料描述为:重新启动IIS),即创建一个新的进程去负责应付Http请求,而将旧进程所占用的内存回收。

当我们有一台很大内存的服务器时,“memoryLimit”这个值是需要进行适当的调整的。比如我们准备了一台4G内存的服务器,那么4G×60%=2.4G。但是,对于Win32操作系统,一个进程所能占用的所有内存空间只有2G。当ASP.NET进程占用的内存开始达到2G时,由于它并没有达到2.4G的“回收阈值”,所以IIS不会启动recycle进程操作,但是由于Win32的限制,实际上已经不能给这个进程分配更多的内存了,于是,OutOfMemoryException就很可能会被抛出了。为了避免这样的情况,我们就必须将“memoryLimit”适当调小,以让IIS更早的进行进程回收。

微软推荐的ASP.NET进程占用内存是不超过60%,并最好使计算出的实际值不超过>800M。就是说,对于一台>4G内存的服务器,最好将“memoryLimit”属性设置成“20”。设置一个适当的回收阈值,让IIS适时的进行进程回收,对于保证整个服务器的稳定运行,避免OutOfMemoryException是非常重要的。
在IIS6中,ASP.NET进程的回收阈值不再由配置节中的“memoryLimit”属性决定,而是由IIS管理器中的应用程序池配置中的设置决定(IIS:w3wp.exe进程占用cpu和内存过多的处理办法)。
但是,即使正确设置了这些配置,也不能保证完全避免OutOfMemoryException的发生,原因可能是多样而复杂的,比如内存回收操作可能耗时太多等等。开发人员要注意的,就是在代码中时刻牢记不要无谓的使用和浪费内存。
如果你有一台大内存的服务器,同时对Win32操作系统中对于进程最高使用>2G内存的限制很郁闷,可选的解决方法有两个:
1、使用/3GB模式启动计算机,方法: http://technet.microsoft.com/zh-cn/library/bb124810%28EXCHG.65%29.aspx
2、使用Windows Server 2003 64bits Edition

关于异常的疑难解答:System.OutOfMemoryException
当尝试分配内存失败时,会引发 OutOfMemoryException 异常。
相关提示
如果要创建数组,请确保其大小正确。
确保有足够的内存用于内部用途和新的托管对象。
如果您正在 .NET Compact Framework 上进行编程,当没有足够的内存可用于内部用途或新的托管对象时,公共语言运行库会引发此异常。要避免此异常,应避免编写占用 64KB 或更多内存的大方法。
备注
过多的托管内存使用量通常由以下因素造成:
1 将大型数据集读入内存中。
2 创建过多的缓存条目。
3 上载或下载大文件。
4 在分析文件时过多地使用正则表达式或字符串。
5 过多的视图状态。
6 会话状态中有过多的数据或者会话过多。
当对 COM 对象调用一个方法,并且该方法返回包含安全数组(大小不固定的数组)的用户定义类型时,可能引发此异常,并附带一条额外的消息“存储空间不足,无法完成此操作”。这是因为 .NET Framework 无法封送带有安全数组类型的结构字段。

REF:

http://blog.csdn.net/limmo/archive/2007/01/20/1488329.aspx

http://hi.baidu.com/melovesmile/blog/item/f69efffd2309a085b901a0bb.html

http://hi.baidu.com/anwyo/blog/item/921e93132e3cf6d3f6039e75.html

http://www.cnblogs.com/kwklover/archive/2005/05/05/149787.html

http://www.360doc.com/content/06/1119/16/1_265250.shtml

IIS:w3wp.exe进程占用cpu和内存过多的处理办法 http://www.cnblogs.com/emanlee/archive/2010/02/06/1664874.html

System.OutOfMemoryException相关推荐

  1. dot Text Error: System.OutOfMemoryException

    实在受不了了! 这段时间博客老是出错! "/blog"应用程序中的服务器错误. 发生类型为 System.OutOfMemoryException 的异常. 说明: 执行当前 We ...

  2. “System.OutOfMemoryException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理

    "System.OutOfMemoryException"类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理 参考文章: (1)"System.Ou ...

  3. .Net IIS 内存溢出(System.OutOfMemoryException)

    .Net IIS 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结 原因是页面上数据量大,缓存太多. 解决的三种方法:1)修改代码,降低缓存数据: 2)设置i ...

  4. System.OutOfMemoryException: 内存不足。

    今天调试asp.net 程序的时候,报出 "System.OutOfMemoryException: 内存不足"的异常,刚开始真让我纳闷,我以为真是的内存不足,还去查看内存占用情况 ...

  5. 解决 Xap 包装失败。引发类型为“System.OutOfMemoryException”的异常

    Xap packaging failed. Exception of type 'System.OutOfMemoryException' Xap 包装失败.引发类型为"System.Out ...

  6. C#编写大计算量程序总是报内存溢出System.OutOfMemoryException的重要原因

    笔者为C#业余爱好者,从开始编写一些计算量较大.内存占用较大的程序时,经常会在编译时报出System.OutOfMemoryException(内存溢出)的错误异常,而实际上,当时的剩余内存还多的是, ...

  7. IIS 异常 “System.OutOfMemoryException”、“存储空间不足,无法完成此操作。”

    1. 场景:今天是中秋节,部门内一个项目才上线,需要有人值班,作为部门的小头头理所当然的奉献一下了.上午基本上没什么问题, 话说也那么巧,中午正好与客户吃饭呢应用人员报告,有两台机器同时"白 ...

  8. 分析性能瓶颈 — 调试OutOfMemoryException

    在前面的文章里面,执行性能测试-起步里,讲了执行性能测试的基本步骤,而且在前面的例子里面,通过一个2M多的文本文件,对比了冒泡排序和快速排序的性能之间的差别.但是当我使用一个700M大小的文本文件进行 ...

  9. system.exception所有子类详解

    一直以来写代码抛出的异常都用的exception,从来没有像书上教的那样具体可能是啥异常就抛对应的异常,最后才说用的exception异常类抛异常.前段时间整理代码的时候突然感觉好像从来也就没有对异常 ...

最新文章

  1. maven初学者常见错误汇总(三)
  2. javaweb学习总结——基于Servlet+JSP+JavaBean开发模式的用户登录注册
  3. java单链表 提供增删改查_java实现单链表增删改查的实例代码详解
  4. sqlite 字符串 转 整型 cast 函数 (强制类型转换 )
  5. 接口文档生成工具Swagger2的使用
  6. 用户ID生成唯一邀请码的几种方法
  7. 最让人心动的十大互联网界广告语+超笑评语
  8. CDMA,GSM,WCDMA,TD-SCDMA,CDMA2000,3G的区别
  9. VAssistX使用总结
  10. PLSQL Developer解决科学计数法
  11. SpringCloud-Gateway网关
  12. IKVM.NET_第三篇_成功项目
  13. 一个数的所有连续自然数之和
  14. hrbp 牵着鼻子走_8招让你不再被职场牵着鼻子走
  15. hackerrank初级篇之staircase
  16. idea通过maven使用docker插件生成镜像并推送到harbor仓库
  17. PHP快手直播弹幕采集,获取斗鱼弹幕php版(原创)
  18. 兴趣爱好页面.html,兴趣筛选页面.html
  19. 一体机电脑属于微型计算机,微型计算机在机电一体化中的地位
  20. PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...

热门文章

  1. 【numpy学习笔记】数组的创建和基本运算
  2. Transformer模型有多少种变体?复旦邱锡鹏教授团队做了全面综述
  3. 如何使用 BERT 进行自然语言处理?
  4. 1行代码搞定Latex公式编写,这个4.6M的Python小插件,堪称论文必备神器
  5. 首批国家级一流本科专业公布,至少64所高校计算机相关专业入选,AI专业不够推荐资格...
  6. 阿广自掏腰包,赠送8套鼠标键盘
  7. 二叉树中第二小的节点
  8. 使用Django开发REST 接口
  9. 认识RESTful设计风格
  10. 美多商城之商品(商品列表页)