如果有多用户同时在服务器上下载一个文件,结果服务器报错误为:虚拟内存太低
说明服务器将同一个下载文件读入到内存中读了很多次,比如:如果有10个人同时请求下载,那服务器端是不是在内存中将该文件读入了10个?请问,该怎么优化多用户同时下载

解决方案 »

  1.   

    这是一个用FTP下载的例子.
    private void Download(string filePath, string fileName)
    {
        FtpWebRequest reqFTP;    try
        {
            FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);         reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileName));        reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;        reqFTP.UseBinary = true;        reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);        FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();        Stream ftpStream = response.GetResponseStream();        long cl = response.ContentLength;        int bufferSize = 2048;        int readCount;        byte[] buffer = new byte[bufferSize];        readCount = ftpStream.Read(buffer, 0, bufferSize);        while (readCount > 0)
            {
                outputStream.Write(buffer, 0, readCount);            readCount = ftpStream.Read(buffer, 0, bufferSize);
            }        ftpStream.Close();        outputStream.Close();        response.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
      

  2.   

    octverve(生命无色,命运多彩……) 
    你是怎么做的?
      

  3.   

    http://developer.51cto.com/art/200706/49911.htm
      

  4.   

    同时下载一个的话,IIS是仅读入一个文件的,但你自己用ASP.NET写下载逻辑的话,那就难说了。
      

  5.   

    to cat_hsfz 
    怎么写应该?
    我的代码是:
           FileInfo file = null;
                string filename = Server.MapPath(path);
                file = new FileInfo(filename);
                Response.Clear();
                Response.AddHeader("Content-Disposition","attachment; filename=");
                Response.AddHeader("Content-Length",file.Length.ToString());
                Response.ContentType = "application/octet-stream";
                Response.WriteFile(filename);
                Response.End();
    不知道该怎么改动一下
      

  6.   

    直接用WriteFile的话,估计是优化过的,也就是同一文件只有一个缓存,这个要用Reflector看看WriteFile的实现。如果是自己把文件读到MemoryStream,然后写到Response的话,那个效率就不怎么样了。