.net 大文件上传设定

 最近做了个关于文件上传的功能,遇到了很多问题,经过研究查资料,最后一一解决,虽然不能说是最好的方法,但可以上传500M 的文件还是没有什么问题的.所以整理了下资料,贴出来希望大家可以研究,或者说是提供一些参考.
能够给大家一些启发.
    1.2M以上的文件不能上传?
     首先我们来说一下如何解决ASP.NET中的文件上传大小限制的问题,我们知道在默认情况下ASP.NET的文件上传大小限制为2M,一般情况下,我们可以采用更改WEB.Config文件来自定义最大文件大小,如下:
<httpRuntime executionTimeout="300" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false"/>这样上传文件的最大值就变成了4M,但这样并不能让我们无限的扩大MaxRequestLength的值,因为ASP.NET会将全部文件载入内存后,再加以处理,服务器会出现内存不够的现象.经常会报OutOfMemoryException,网上查了很多资料都没有什么好的方法, 按照网上的方法全做了一遍感觉有些方法可以有些改善.如下:
    在.NET Framework的配置上,修改machine.config配置文件中的配置节<processModel>的属性“memoryLimit”,这个属性的值默认为“60”,是一个百分比数据,我们需要按照服务器实际的内存数,再根据800M的上限来设置这个值,那么在达到这个阀值时IIS会自动回收进程.
     当我们有一台很大内存的服务器时,“memoryLimit”这个值是需要进行适当的调整的。比如我们准备了一台chemas-microsoft-comSurprisefficeTongue Tiedmarttags" />Tongue Tiedt="on">4G内存的服务器,那么Tongue Tiedt="on">4G×60%=2.4G。但是,对于Win32操作系统,一个进程所能占用的所有内存空间只有Tongue Tiedt="on">2G。当ASP.NET进程占用的内存开始达到Tongue Tiedt="on">2G时,由于它并没有达到Tongue Tiedt="on">2.4G的“回收阈值”,所以IIS不会启动recycle进程操作,但是由于Win32的限制,实际上已经不能给这个进程分配更多的内存了,于是,OutOfMemoryException就很可能会被抛出了。为了避免这样的情况,我们就必须将“memoryLimit”适当调小,以让IIS更早的进行进程回收。
    微软推荐的ASP.NET进程占用内存是不超过60%,并最好使计算出的实际值不超过Tongue Tiedt="on">800M。就是说,对于一台Tongue Tiedt="on">4G内存的服务器,最好将“memoryLimit”属性设置成“20”。设置一个适当的回收阈值,让IIS适时的进行进程回收,对于保证整个服务器的稳定运行,避免OutOfMemoryException是非常重要的。

   好设好Machin.config 后有所改善,但是还是经常会OutOfMemoryException 的异常,怎么办.最后找了个微软官方的资料.提供了一些改善的方法地址如下http://support.microsoft.com/kb/916984

 

其中最主要的方法如下:

在 IIS 6.0 中 ASP Web 应用程序使用异步写入 Http.sys 文件将数据传输到客户端计算机。 如果客户端计算机使用慢速连接,并且速度很慢检索请求的数据,数据排队 Web 服务器上的内存中。

应用此修补程序后,可以在内存中来配置进行排队的字节数。 如果您配置的限制达到之前在客户端计算机检索足够多的数据,以便队列的数据量小于配置的限制,,将暂停文件传输。

重要 此修复程序只会影响 ASP 应用程序。 此修补程序不会影响 Microsoft ASP.NET 应用程序。

要限制可以将排队 W3wp.exe 文件中的数据量,请按下列步骤操作:

  1. 应用本文中所述修补程序。
  2. 单击 开始 ,单击 运行 ,键入 regedit ,然后单击 确定
  3. 查找,并单击下面的注册表项:
    HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/ASP/Parameters
  4. 如果 VectorSendThrottleLimit 子项存在,转到步骤 7。 如果不存在 VectorSendThrottleLimit 子项,请转到步骤 5。
  5. 编辑 菜单上指向 新建 ,然后单击 DWORD 值
  6. 键入 VectorSendThrottleLimit ,然后按 Enter 键。
  7. 在右的窗格中右键单击 VectorSendThrottleLimit ,然后单击 修改
  8. 在在 数值数据 框中键入所需的值,,然后单击 确定

警告 如果将 VectorSendThrottleLimit 子项设置为一个 ASP 页发送到客户端的数据量小于值,IIS 会停止响应 (挂起)。 是例如如果您设置 VectorSendThrottleLimit 子项为 1000,传输超过 1000 个字节的任何 ASP 页面不在客户端浏览器中的 dispayed。 此外,IIS 线程处理该请求的被阻止,直到重新启动 IIS 服务中。

请注意 默认情况下, 此功能被禁用并且 VectorSendThrottleLimit 子项不存在。 在禁用此功能时则此子项的值为 0。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值