OutOfMemonryException异常的原因
OutOfMemonryException异常的原因
OutOfMemonryException异常的原因OutOfMemonryException异常通常由以下因素造成:
1、将大型数据集读入内存中。
2、创建过多的缓存条目。
3、上载或下载大文件。
4、在分析文件时过多地使用正则表达式或字符串。
5、过多的视图状态。
6、会话状态中有过多的数据或者会话过多。
7、程序中存在死循环,或者循环次数过大。
8、对 COM 对象调用一个方法,并且该方法返回包含安全数组(大小不固定的数组)的用户定义类型时,可能引发此异常,并附带一条额外的消息“存储空间不足,无法完成此操作”。这是因为 .NET Framework 无法封送带有安全数组类型的结构字段。
9、程序中用完的对象没有及时释放掉。
常见的处理OutOfMemonryException的方法
1) 在硬件的配置上
出现该问题的原因我想很多人已经知道了,那就是IIS对于内存的管理存在一些限制,普遍的认识是800M的线程内存使用上限,不管是w3wp还是aspnet_wp,这个限制对ASP.NET应用服务器的机器配置而言其意义是很明显的,超过2G的内存对于单纯的Web服务器而言作用是很微小的,所以在Web服务器的配置上可在CPU的数量方面多考虑。
2) IIS配置上的方案
对于IIS6.0及以上可以在应用程序池的配置上设置自动回收工作线程的时间,一般都会设在晚上访问比较少的时间段。
3) 在.NET Framework的配置上
修改machine.config配置文件中的配置节<processModel>的属性“memoryLimit”,这个属性的值默认为“60”,是一个百分比数据,我们需要按照服务器实际的内存数,再根据800M的上限来设置这个值,那么在达到这个阀值时IIS会自动回收进程
4) 在Web应用程序的开发中
必须尽可能的减少对内存使用的浪费,及时释放资源:
1、通过代码主动调用Dispose方法进行资源释放
2、对于实体类尽可能复用,不做多余的声明和创建
3、减少Session的使用,缩短Session的有效期,尤其对于大数据对象尽量不要存储在Session中。
5) 一个比较通用的办法
在Web应用程序的基类中通过try{}catch{}来主动捕捉OutOfMemoryException异常,发现该异常后直接调用GC.Collect()进行强制垃圾回收。
热门推荐
- anaconda如何配置python3.7(WIn10+Anaconda环境下安装PyTorch避坑指南)
- javascript构造重复数组(JavaScript平铺数组转树形结构的实现示例)
- win7iis搭建web服务器(如何搭建云服务器之IIS的配置)
- mysql索引的类型和方法(MySQL覆盖索引的使用示例)
- mysql添加注释视图(mysql创建表添加字段注释的实现方法)
- text-overflow超出部分用省略号
- 如何搭建个人网盘dedecms(linux和windows主机实现dedecms伪静态)
- 启动sqlserver代理服务失败(SQL Server代理服务无法启动怎么办)
- php添加数据到mysql数据库(PHP通过代码连接XAMPP数据库及MySQL数据库方法)
- dedecms增加导航内容(织梦DEDECMS中让近三天发布的文章显示红色日期或加上new字或小图片的方法)