Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的ftp上传方法这么慢?_C#_Ftp_Ftpwebrequest - Fatal编程技术网

C# 为什么我的ftp上传方法这么慢?

C# 为什么我的ftp上传方法这么慢?,c#,ftp,ftpwebrequest,C#,Ftp,Ftpwebrequest,我编写了一个控制台应用程序,从FTP下载文件,然后上传到不同的FTP位置。 下载文件大约需要10秒钟,但上传大约需要6分钟。 有256个文件,每个文件大小约为5-30KB。这么小 上载和下载代码非常相似,它迭代目录中的所有文件,然后上载。它相当简单,如下所示,它迭代并将文件从D:\LEV\文件夹上传到ftp 编辑:这是在Azure“小型”Windows虚拟机上运行的,所以我假设带宽不是问题? 此外,我正在另一台虚拟机上执行相同的任务,使用windows ftp.exe进行上载,速度比同一台机器上

我编写了一个控制台应用程序,从FTP下载文件,然后上传到不同的FTP位置。 下载文件大约需要10秒钟,但上传大约需要6分钟。 有256个文件,每个文件大小约为5-30KB。这么小

上载和下载代码非常相似,它迭代目录中的所有文件,然后上载。它相当简单,如下所示,它迭代并将文件从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;
}

这里有几个因素需要考虑:

  • 您的internet连接不能保证对称。大多数互联网连接计划(至少在我所在的地区)提供的上传带宽是下载带宽的1/8

  • FTP服务器本身可能会限制传入连接的带宽

  • FTP服务器还可能正在限制每次上载的最大带宽。在这种情况下,您将从多线程上传中获益匪浅,一次上传多个文件


  • 这里有几个因素需要考虑:

    • 您的internet连接不能保证对称。大多数互联网连接计划(至少在我所在的地区)提供的上传带宽是下载带宽的1/8

    • FTP服务器本身可能会限制传入连接的带宽

    • FTP服务器还可能正在限制每次上载的最大带宽。在这种情况下,您将从多线程上传中获益匪浅,一次上传多个文件


    您的互联网速度是多少?它有保证带宽还是尽力而为带宽?嗨,说得好。我在一台Azure“小型”虚拟机上,因此我假设带宽不是限制因素。您可能有良好的internet连接,但您尝试上载文件的远程ftp服务器呢?您的internet速度是多少?它有保证带宽还是尽力而为带宽?嗨,说得好。我在一个Azure“小型”虚拟机上,因此我假设带宽不是限制因素。您可能有良好的internet连接,但是您尝试上载文件的远程ftp服务器呢?我刚刚添加了一个编辑。我刚刚使用windows ftp.exe在另一个VM(非azure)上做了另一个测试,它比我的控制台应用程序快2倍。要了解代码中是否有特定的内容导致速度减慢,请尝试使用
    WebClient
    进行上传,看看您是否获得了更好的结果。我刚刚添加了一个编辑。我刚刚使用windows ftp.exe在另一个VM(非azure)上做了另一个测试,速度比我的控制台应用快2倍。若要了解您的代码中是否存在导致速度减慢的特定内容,请尝试使用
    WebClient
    进行上载,看看您是否获得了更好的结果。