登录
注册
程序人生
个人空间
个人相册
帮助
界面
简洁版本
拼吾爱程序人生
.Net编程
Asp.Net
OutOfMemoryException问题的处理
Web
www.pin5i.com
输入您的搜索字词
提交搜索表单
.Net编程
Asp.Net
C#
ADO.Net
Visual Studio.NET
Silverlight
F#
WCF
WPF
Linq
WF
其他编程
Java
Ajax
javascript
正则表达式
XML
Web Service
C & C++
Ruby & Python
Flex
PHP
数据库编程
SQL
SQL Server
Oracle
DB2
MySQL
Other DB
编程应用
软件测试
应用系统
SEO
Google Adsense
建站软件
程序人生
程序人生
社区管理
网站事务
公益活动
1
/ 1 页
1
跳转
页
查看:
935
OutOfMemoryException问题的处理
SystemPoster
个人空间
相册
性别:
来自:
积分:
7433
帖子:
7194
注册:
2007-07-18
2007-08-03 00:23
|
只看楼主
树型
|
收藏
|
小
中
大
复制帖子链接到剪贴板
1F
OutOfMemoryException问题的处理
Author:chainet From:Cnblogs
介绍
我所参与做的产品是一个比较大型的ASP.NET系统,在测试部门和客户那里,如果长时间运行,系统常常会出现一些OutOfMemoryException的异常。引起内存溢出的错误的原因有很多,主要在服务器配置方面和代码编写两个方面可以进行优化和改进,避免此类问题的出现,但完全杜绝是比较困难的。下面是我收集整理的一些解决方法。
服务器配置方面
1. 安装.NET Framework 1.1 Service Pack 1
补丁部分解决了一些内存泄漏的问题,下载地址为:
http://www.microsoft.com/downloads/details.aspx?displaylang=en&;amp;FamilyID=a8f5654f-088e-40b2-bbdb-a83353618b38
2. 使用更多的内存
a.打开/3GB Switch(如果你有3GB以上的内存)。这个配置只在Windows 2000 Advanced Server和Data Center版本以及Windows Server 2003以上才支持,参见:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag/html/scalenetchapt17.asp
http://support.microsoft.com/default.aspx?scid=kb;en-us;820108
b.即使你有很多内存,但.NET(注意不是ASP.NET工作进程,而是.NET整个使用的内存是有一定限制的,可以通过加大配置使用量来减少内存溢出的发生。方法如下:
修改machine.config文件,一般在 %System%\Microsoft.Net\Framework\v1.1.4322\CONFIG目录中, 修改processModel元素中的memoryLimit,大于缺省设置的60(意味着物理内存的60%)。
3. 回收工作线程
设置IIS定期清除Work process是避免此异常的一个较好的方式。但这个功能是IIS 6.0(也就是Windows 2003上带的IIS)才支持。
配置方法如下:
修改IIS的应用程序池配置,选择DefaultAppPool(如果你的系统是用这个池),右键点属性->Recycling Setting,然后选择根据情况 修改“Recycle worker processes at the following times:'等几项配置,其中定时回收工作进程是一个比较好的方式,可以避免回收工作进程时,引起客户Session丢失。
Windows 2000 server 上安装的是IIS 5.0,本身不支持Recycle,但要想实现这个功能也不难。微软针对IIS提供的IIS5Recycle便是这样一个程序,它安装后以服务形式提供回收工作进程。
安装说明见
http://support.microsoft.com/?id=322350
图片是表示安装好之后的配置信息! 是不是和IIS6中的一模一样?
附件:
您所在的用户组无法下载或查看附件
代码编写方面的注意问题
1.System.Drawing方面的类使用问题
System.Drawing用到了很多系统的资源和非托管代码,所以使用的时候要特别小心,注意内存泄漏(Memory Leak)例如:BitMap.MakeTransparent方法的使用问题:
http://www.dotnet247.com/247reference/msgs/40/202528.aspx
2.new byte[]问题
处理流的时候常常会用到new一个大的byte数组。但在多用户情况下会消耗大量的内存。正确的做法应该是定义一个比较小的byte数组做为缓存,然后循环使用。如在我们的程序中,有些地方使用不当,当图片(或附件)过大或过多的时候, new byte[length]就有可能消耗过多的内存。
3. 避免使用大对象数组或小对象大数组
编程时同样要重视效率问题(包括内存占用问题)。
4.Com接口调用是要注意释放对象。
感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
您可能对 [Asp.Net] 的这些文章也感兴趣:
ASP.NET2.0应用中定制安全凭证之理论篇
ASP.NET2.0和数据绑定控件:新的角度,新的做法
Asp.NET大文件上传开发总结(一)
.NET配置文件解析过程详解
漫谈.NetPetShop和DuwamishADO.NET数据库编程(2)
ASP.NET中数据库数据导入Excel并打印(2)
Asp.net Mvc Codeplex Preview 5 第三篇 实现Action参数传递繁杂类型
ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第三篇:ASP.NET MVC全局观
System.Web.Routing入门及进阶 上篇
ASP.NET创建Web服务之设计方针
发送短消息
查看公共资料
查找该会员全部帖子
UID:
51
精华:
1
威望:
4
金钱:
1995.6 拼元
状态:
离线
<<
上一主题
|
下一主题
>>
1
/ 1 页
1
跳转
页
快速回复帖子
标题
禁用 URL 识别
禁用表情
禁用 Discuz!NT 代码
使用个人签名
default
正在加载表情...
[完成后可按 Ctrl+Enter 无刷新发布]
论坛跳转...
.Net编程
Asp.Net
C#
ADO.Net
Visual Studio.NET
Silverlight
F#
WCF
WPF
Linq
WF
其他编程
Java
Eclipse
Spring
EJB
Ajax
ExtJS
Dojo
javascript
jQuery
正则表达式
XML
Web Service
C & C++
Ruby & Python
Flex
PHP
数据库编程
SQL
SQL Server
Oracle
DB2
MySQL
Other DB
编程应用
软件测试
应用系统
SEO
Google Adsense
建站软件
程序人生
程序人生
社区管理
网站事务
公益活动
管理团队
回收站
下载权限不够?五招教你快速提升权限。。。
我的主题
我的帖子
我的精华
我的空间
我的相册
帖子标题
空间日志
相册标题
作 者
我的主题
我的帖子
我的附件
我的精华
我的空间
我的相册