C# 为什么我的ftp上传方法这么慢?
我编写了一个控制台应用程序,从FTP下载文件,然后上传到不同的FTP位置。 下载文件大约需要10秒钟,但上传大约需要6分钟。 有256个文件,每个文件大小约为5-30KB。这么小 上载和下载代码非常相似,它迭代目录中的所有文件,然后上载。它相当简单,如下所示,它迭代并将文件从D:\LEV\文件夹上传到ftp 编辑:这是在Azure“小型”Windows虚拟机上运行的,所以我假设带宽不是问题? 此外,我正在另一台虚拟机上执行相同的任务,使用windows ftp.exe进行上载,速度比同一台机器上的控制台应用快2倍 有什么线索可以解释为什么速度这么慢,或者有什么方法可以提高速度C# 为什么我的ftp上传方法这么慢?,c#,ftp,ftpwebrequest,C#,Ftp,Ftpwebrequest,我编写了一个控制台应用程序,从FTP下载文件,然后上传到不同的FTP位置。 下载文件大约需要10秒钟,但上传大约需要6分钟。 有256个文件,每个文件大小约为5-30KB。这么小 上载和下载代码非常相似,它迭代目录中的所有文件,然后上载。它相当简单,如下所示,它迭代并将文件从D:\LEV\文件夹上传到ftp 编辑:这是在Azure“小型”Windows虚拟机上运行的,所以我假设带宽不是问题? 此外,我正在另一台虚拟机上执行相同的任务,使用windows ftp.exe进行上载,速度比同一台机器上
static public void Upload(string file1)
{
string upftpServerIP = "ftp://ftp.domain.co.uk/lev/";
string upftpUserID = "username";
string upftpPassword = "password";
string uri = upftpServerIP + file1;
Uri serverUri = new Uri(uri);
if (serverUri.Scheme != Uri.UriSchemeFtp)
{
return;
}
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(upftpServerIP + file1));
reqFTP.Credentials = new NetworkCredential(upftpUserID, upftpPassword);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.Proxy = null;
reqFTP.UsePassive = true;
Console.WriteLine("Uploading " + file1);
FileStream fs = File.OpenRead(@"D:\LEV\" + file1);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
Stream ftpstream = reqFTP.GetRequestStream();
ftpstream.Write(buffer, 0, buffer.Length);
ftpstream.Close();
}
static public string[] GetFileListUpload()
{
string[] uploadFiles = Directory.GetFiles(@"D:\LEV\", "*.*", SearchOption.TopDirectoryOnly);
return uploadFiles;
}
这里有几个因素需要考虑:
- 您的internet连接不能保证对称。大多数互联网连接计划(至少在我所在的地区)提供的上传带宽是下载带宽的1/8
- FTP服务器本身可能会限制传入连接的带宽
- FTP服务器还可能正在限制每次上载的最大带宽。在这种情况下,您将从多线程上传中获益匪浅,一次上传多个文件
- 您的internet连接不能保证对称。大多数互联网连接计划(至少在我所在的地区)提供的上传带宽是下载带宽的1/8
- FTP服务器本身可能会限制传入连接的带宽
- FTP服务器还可能正在限制每次上载的最大带宽。在这种情况下,您将从多线程上传中获益匪浅,一次上传多个文件
这里有几个因素需要考虑:
WebClient
进行上传,看看您是否获得了更好的结果。我刚刚添加了一个编辑。我刚刚使用windows ftp.exe在另一个VM(非azure)上做了另一个测试,速度比我的控制台应用快2倍。若要了解您的代码中是否存在导致速度减慢的特定内容,请尝试使用WebClient
进行上载,看看您是否获得了更好的结果。