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
Êtes-vous derrière un routeur? –
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. –