问大家一个关于并发多用户下载文件的问题

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

请问,该怎么优化多用户同时下载
...全文
376 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
lizheng__114 2007-12-07
  • 打赏
  • 举报
回复
我还是不太明白你的意思,能否再说清楚些,到底该怎么做才会好点
cat_hsfz 2007-12-07
  • 打赏
  • 举报
回复
直接用WriteFile的话,估计是优化过的,也就是同一文件只有一个缓存,这个要用Reflector看看WriteFile的实现。如果是自己把文件读到MemoryStream,然后写到Response的话,那个效率就不怎么样了。
lizheng__114 2007-12-07
  • 打赏
  • 举报
回复
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();
不知道该怎么改动一下
cat_hsfz 2007-12-06
  • 打赏
  • 举报
回复
同时下载一个的话,IIS是仅读入一个文件的,但你自己用ASP.NET写下载逻辑的话,那就难说了。
wanabe 2007-12-06
  • 打赏
  • 举报
回复
10个人怎么也报不到错吧~
lwl0376 2007-12-06
  • 打赏
  • 举报
回复
关注
lizheng__114 2007-12-06
  • 打赏
  • 举报
回复
期待更好的解决方案
lizheng__114 2007-09-05
  • 打赏
  • 举报
回复
顶个
bigmingming 2007-09-05
  • 打赏
  • 举报
回复
http://developer.51cto.com/art/200706/49911.htm
xueying1123 2007-09-05
  • 打赏
  • 举报
回复
up
lizheng__114 2007-09-05
  • 打赏
  • 举报
回复
octverve(生命无色,命运多彩……)
你是怎么做的?
octverve 2007-09-05
  • 打赏
  • 举报
回复
不会吧,我以前试过的,没有出错啊,(是一个50M的文件,20个客户端同时下载,也没有问题啊)
wxlwxlwxlwxl 2007-09-05
  • 打赏
  • 举报
回复
mark.
jiangmin168168 2007-09-05
  • 打赏
  • 举报
回复
这是一个用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);
}
}

jiangmin168168 2007-09-05
  • 打赏
  • 举报
回复
用多线程会好一些.
一般如果访问大的话,可以考虑用单独的服务器来做下载.
jiangmin168168 2007-09-05
  • 打赏
  • 举报
回复
sf

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧