2009-05-17 7 views
3

Il y a quelques semaines, j'ai écrit un simple script Ruby pour tester quelques commandes FTP dans un environnement Windows XP. Tout a fonctionné comme prévu, et je n'étais même pas au courant du temps nécessaire pour que le code fonctionne (je devine 3-4 secondes tout au plus.)Ruby FTP extrêmement lent sous Windows XP

Il y a quelques jours, un Ruby beaucoup plus impliqué application que je développe a commencé à courir très lentement. Comme j'ai étudié le problème, j'ai isolé le problème aux commandes FTP. J'ai maintenant réexécuté le script de test d'origine, et il prend plus de deux minutes pour s'exécuter. La ligne de commande FTP est essentiellement instantanée.

Aucun fichier de la structure du répertoire ruby ​​n'a été modifié. Je ne crois pas que de nouvelles applications aient été installées - certainement aucune autre application ne semble fonctionner.

Quelqu'un peut-il suggérer pourquoi le code suivant devrait fonctionner si lentement? La synchronisation manuelle des intervalles entre les instructions print suggère que les nlst et ls prennent environ 65 secondes chacun! Le profileur donne un total ms/appel beaucoup plus plausible de 16 pour nlst et 31 pour ls.

require 'net/ftp' 

Net::FTP.open("ip_redacted", "user_redacted", "password_redacted") do |ftp| 
    ftp.chdir("dir_redacted") 

    files = ftp.nlst 
    print "files = #{files.sort!}\n" 
    list = ftp.ls 
    print "list = #{list}\n" 

    file = "filename_redacted" 

    size = ftp.size(file) 
    print "size = #{size}\n" 

end 
+0

Êtes-vous derrière un routeur? –

+0

C'est une question intéressante. Les deux machines sont sur un réseau local. Un tracert de l'un à l'autre montre deux sauts dans ce réseau. tracert indique que tous les sauts sont <1 ms, mais le tracert lui-même prend une minute pour revenir. Notez que FTP en ligne de commande n'affiche pas les mêmes délais que FTP de Ruby. –

Répondre

0

Essayez de retirer le #sort! (juste puts "files = #{files}") car cela peut être assez cher s'il y a un tas de fichiers dans le répertoire. Ceci expliquerait le grand décalage autour de la #nlst et la #ls

+0

Merci, mais cela fait très peu de différence dans ce cas - il n'y a qu'une douzaine de fichiers dans le répertoire. Par le profileur, le #sort prend 0.00 ms. J'ai fait un pas (ou plutôt suivi) à travers le code dans le débogueur, et c'est le #nlst et le #ls qui prennent le temps. –

+0

ah, eh bien, valait la peine de deviner. – rampion

2

J'ai eu un problème similaire et trouvé le mode passif a augmenté la vitesse, par exemple. ftp.passive=true.

+0

Merci. Désactiver la recherche DNS inversée a fonctionné pour moi, mais d'autres pourraient essayer le mode passif. –

Questions connexes