title: C# Getting a complete file list using ftpRequest is slow
body: <p>I want to get the filename, file size and last modified time of each file on an FTP server, then populate a listView with it.</p>
  
  <p>It worked really well until I switched FTP host, and now it's really sluggish, despite the new host being just as fast in real FTP clients.</p>
  
  <p>Any apparent reason as to why?</p>
  
  <p>Also, is it really neccessary to send the login credentials each time?</p>
  
  <p>I'm using the first method to get a string array, then iterate through it and use the second one on each item to get the file size:</p>
  
  <pre><code>    public static string[] GetFileList()
      {
          string[] downloadFiles;
          StringBuilder result = new StringBuilder();
          FtpWebRequest request;
          try
          {
              request = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://mysite.se/"));
              request.UseBinary = true;
              request.Credentials = new NetworkCredential(settings.Username, settings.Password);
              request.Method = WebRequestMethods.Ftp.ListDirectory;
              request.UseBinary = true;
  
              WebResponse response = request.GetResponse();
              StreamReader reader = new StreamReader(response.GetResponseStream());
  
              string line = reader.ReadLine();
              while (line != null)
              {
                  result.Append(line);
                  result.Append("\n");
                  line = reader.ReadLine();
              }
              // to remove the trailing '\n'
              result.Remove(result.ToString().LastIndexOf('\n'), 1);
              reader.Close();
              response.Close();
              return result.ToString().Split('\n');
          }
          catch (Exception ex)
          {
              System.Windows.Forms.MessageBox.Show(ex.Message);
              downloadFiles = null;
              return downloadFiles;
          }
      }
  
      public static int GetFileSize(string file)
      {
          //MessageBox.Show("getting filesize...");
  
          StringBuilder result = new StringBuilder();
          FtpWebRequest request;
          try
          {
              request = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://mysite.se/" + file));
              request.UseBinary = true;
              request.Credentials = new NetworkCredential(settings.Username, settings.Password);
              request.Method = WebRequestMethods.Ftp.GetFileSize;
  
              int dataLength = (int)request.GetResponse().ContentLength;
  
              return dataLength;
          }
          catch (Exception ex)
          {
              //System.Windows.Forms.MessageBox.Show(ex.Message);
              return 1337;
          }
      }
  </code></pre>