System.OutOfMemoryException
在什么情况下会出现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相关推荐
- dot Text Error: System.OutOfMemoryException
实在受不了了! 这段时间博客老是出错! "/blog"应用程序中的服务器错误. 发生类型为 System.OutOfMemoryException 的异常. 说明: 执行当前 We ...
- “System.OutOfMemoryException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理
"System.OutOfMemoryException"类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理 参考文章: (1)"System.Ou ...
- .Net IIS 内存溢出(System.OutOfMemoryException)
.Net IIS 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结 原因是页面上数据量大,缓存太多. 解决的三种方法:1)修改代码,降低缓存数据: 2)设置i ...
- System.OutOfMemoryException: 内存不足。
今天调试asp.net 程序的时候,报出 "System.OutOfMemoryException: 内存不足"的异常,刚开始真让我纳闷,我以为真是的内存不足,还去查看内存占用情况 ...
- 解决 Xap 包装失败。引发类型为“System.OutOfMemoryException”的异常
Xap packaging failed. Exception of type 'System.OutOfMemoryException' Xap 包装失败.引发类型为"System.Out ...
- C#编写大计算量程序总是报内存溢出System.OutOfMemoryException的重要原因
笔者为C#业余爱好者,从开始编写一些计算量较大.内存占用较大的程序时,经常会在编译时报出System.OutOfMemoryException(内存溢出)的错误异常,而实际上,当时的剩余内存还多的是, ...
- IIS 异常 “System.OutOfMemoryException”、“存储空间不足,无法完成此操作。”
1. 场景:今天是中秋节,部门内一个项目才上线,需要有人值班,作为部门的小头头理所当然的奉献一下了.上午基本上没什么问题, 话说也那么巧,中午正好与客户吃饭呢应用人员报告,有两台机器同时"白 ...
- 分析性能瓶颈 — 调试OutOfMemoryException
在前面的文章里面,执行性能测试-起步里,讲了执行性能测试的基本步骤,而且在前面的例子里面,通过一个2M多的文本文件,对比了冒泡排序和快速排序的性能之间的差别.但是当我使用一个700M大小的文本文件进行 ...
- system.exception所有子类详解
一直以来写代码抛出的异常都用的exception,从来没有像书上教的那样具体可能是啥异常就抛对应的异常,最后才说用的exception异常类抛异常.前段时间整理代码的时候突然感觉好像从来也就没有对异常 ...
最新文章
- maven初学者常见错误汇总(三)
- javaweb学习总结——基于Servlet+JSP+JavaBean开发模式的用户登录注册
- java单链表 提供增删改查_java实现单链表增删改查的实例代码详解
- sqlite 字符串 转 整型 cast 函数 (强制类型转换 )
- 接口文档生成工具Swagger2的使用
- 用户ID生成唯一邀请码的几种方法
- 最让人心动的十大互联网界广告语+超笑评语
- CDMA,GSM,WCDMA,TD-SCDMA,CDMA2000,3G的区别
- VAssistX使用总结
- PLSQL Developer解决科学计数法
- SpringCloud-Gateway网关
- IKVM.NET_第三篇_成功项目
- 一个数的所有连续自然数之和
- hrbp 牵着鼻子走_8招让你不再被职场牵着鼻子走
- hackerrank初级篇之staircase
- idea通过maven使用docker插件生成镜像并推送到harbor仓库
- PHP快手直播弹幕采集,获取斗鱼弹幕php版(原创)
- 兴趣爱好页面.html,兴趣筛选页面.html
- 一体机电脑属于微型计算机,微型计算机在机电一体化中的地位
- PHP版微信权限验证配置,音频文件下载,FFmpeg转码,上传OSS和删除转存服务器本地文件...