C# FTP批量下载写文件慢

s871148319 2015-05-15 11:55:03
我需要批量下载大量小文件,用的FtpWebRequest
System.Net.FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(URI);
ftp.Credentials = new NetworkCredential(filedown.user, filedown.password);
ftp.KeepAlive = false;
ftp.Method = WebRequestMethods.Ftp.DownloadFile;
ftp.UseBinary = true;
ftp.UsePassive = true;
FtpWebResponse response = (FtpWebResponse)ftp.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);
FileStream outputStream = new FileStream(filedown.localdir + "\\" + filename, FileMode.Create);
while (readCount > 0)
{
outputStream.Write(buffer, 0, readCount);
readCount = ftpStream.Read(buffer, 0, bufferSize);
}
ftpStream.Close();
outputStream.Close();

response.Close();

而这段用流写入不到1kb小文件的时候居然耗时接近200毫秒,这不符合我的速度要求。 请问一下有些什么方案可以快速批量下载小文件。
...全文
364 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tcmakebest 2015-05-15
  • 打赏
  • 举报
回复
虽然只是一个小文件,但麻省虽小五脏俱全,200毫秒不算慢了.开几十个线程同时下载就好了.
  • 打赏
  • 举报
回复
大量小文件,应该并发下载,而不是一个个顺序下载。
s871148319 2015-05-15
  • 打赏
  • 举报
回复
那是要用线程池吧,我用过CLR线程池,这是不是该用IO线程池,是不是指用BeginGetResponse这种。 那怎么样确定和设置最大连接数和并发的最多线程数。 要连接多个服务器 要确保每个服务器的连接都不能超过最大吧 另外曾用C++ CFtpConnection也是一个一个下但是感觉没这么慢。。

110,525

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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