C# d'Obtenir une liste de fichier complet à l'aide de ftpRequest est lent

Je veux obtenir le nom de fichier, la taille du fichier et l'heure de dernière modification de chaque fichier sur un serveur FTP, puis remplir une listView avec elle.

Il marchait très bien jusqu'à ce que je suis passé à l'hôte FTP, et maintenant il est vraiment lent, en dépit de la nouvelle l'hôte d'être tout aussi vite dans la vraie clients FTP.

Aucune raison apparente pour expliquer pourquoi?

Aussi, est-il vraiment nécessaire d'envoyer les informations de connexion à chaque fois?

Je suis en utilisant la première méthode pour obtenir un tableau de chaîne, puis itérer dessus et utiliser la seconde sur chaque élément pour obtenir la taille du fichier:

    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;
}
}

OriginalL'auteur pastapockets | 2010-02-20