Response.Clear()
            Response.ContentType = "application/x-msdownload;charset=UTF-8"
            Response.AddHeader("Content-Disposition", "attachment;filename=" & Server.UrlEncode(file))
            Using fs As New FileStream(file, FileMode.Open, FileAccess.Read)
                Dim br As New BinaryReader(fs)
                Dim bytesRemain As Integer = fs.Length
                Const bufferSize As Integer = 1024
                While bytesRemain > 0
                    Dim bytesToRead As Integer = IIf(bytesRemain > bufferSize, bufferSize, bytesRemain)
                    Dim bytes(bytesToRead - 1) As Byte
                    bytesToRead = br.Read(bytes, 0, bytesToRead)
                    Response.BinaryWrite(bytes)
                    bytesRemain -= bytesToRead
                End While
            End Using
            Response.Flush()
            Response.End()上述代码在下载几M的小文件时没有问题,但我昨天试了一个500M的下载,先是屏幕不动,然后是鼠标不动,然后等了十几分钟,我就手动重启了。我机子配置可不差,奔腾双核,3G内存。请问高手有没有什么好方法?

解决方案 »

  1.   

    CSDN怎么帖子提前功能都没有了,看来以后不能再来了,这里没什么高手了
      

  2.   

    原来Response BUFF有个大小限制,默认是4MB,我们只要将这个限制加大就行了查询默认的大小的步骤如下:1.单击 开始 ,单击 运行 ,键入 cmd ,然后单击 确定 。 2.键入下面的命令,然后按 Enter 键: cd / d %systemdrive%"inetpub"adminscripts 3.键入下面的命令,然后按 Enter 键: cscript.exe adsutil.vbs GET w3svc / aspbufferinglimit  那么我们将它这个限制改大的点,步骤如下:1.单击 开始 ,单击 运行 ,键入 cmd ,然后单击 确定 。 2.键入下面的命令,然后按 Enter 键: cd / d %systemdrive%\inetpub\adminscripts 3.键入下面的命令,然后按 Enter 键: cscript.exe adsutil.vbs SET w3svc / aspbufferinglimit LimitSize  LimitSize 表示缓冲的限制大小,以字节为单位)。 是例如数 67108864 还设置为 64 MB 的缓冲的限制大小。 
      

  3.   

    这问题很好理解,Response.BinaryWrite相当于先读入内存再输出,这种情况文件如果太大,内存肯定吃不消的,所以可以分块下载
    http://74.125.153.132/search?q=cache:I6rScU3oLooJ:www.cnblogs.com/cancer_xu/archive/2009/12/01/1614616.html+Response.BinaryWrite+%E5%88%86%E5%9D%97&cd=4&hl=en&ct=clnk
      

  4.   

    試下這個設置(根據你的需要修改相應參數):
    <system.web>
    <httpRuntime   executionTimeout="600"   maxRequestLength="512000"   useFullyQualifiedRedirectUrl="false"   minFreeThreads="8"   minLocalRequestFreeThreads="4"   appRequestQueueLimit="100"   enableVersionHeader="true"/>
    </system.web>
      

  5.   


    这种又耗CPU时间又占内存的代码就不要保留了.实在要这样,就用分块处理吧.
      

  6.   

    LZ 去看看
    http://topic.csdn.net/u/20070203/13/8f4c7f4e-3b24-4566-bcf2-9a66d6c950c9.html
      

  7.   

    一定要用response.outputstream类下的东西,就不会死机了
      

  8.   

    如果没有特殊要求,还是这样简单:<a href="要下载的文件路径" target='_blank'>下载</a>