FTPからファイルをダウンロードしてから別のFTPの場所にアップロードするコンソールアプリを作成しました。ファイルのダウンロードには約10秒かかりますが、アップロードには約6分かかります。サイズが約5〜30KBの256個のファイルがあります。とても小さいです。
アップロードとダウンロードのコードは非常によく似ており、ディレクトリ内のすべてのファイルを繰り返し処理してからアップロードします。以下に示すように、これはかなり単純で、D:\LEV\フォルダーからftpにファイルを繰り返しアップロードします。
編集:これはAzureの「小さな」Windows仮想マシンで実行されるので、帯域幅は問題ではないと思いますか?また、Windows ftp.exeを使用してアップロードする別の仮想マシンで同じタスクを実行しており、同じマシン上のコンソールアプリよりも2倍高速です。
なぜそれがとても遅いのか、または速度を改善する方法はありますか?
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;
}