Ruby FTP extrêmement lent sous Windows XP

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

Il y a quelques jours, une application Ruby beaucoup plus complexe que celle que je développe a commencé à fonctionner très lentement. En étudiant le problème, j’ai isolé le problème aux commandes FTP. Je vais maintenant relancer le script de test original, et cela prend plus de deux minutes pour s’exécuter. Le FTP en ligne de commande est essentiellement instantané.

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

Quelqu’un peut-il suggérer pourquoi le code suivant devrait fonctionner si lentement? Le chronométrage manuel des intervalles entre print relevés d’ print suggère que le nlst et le nlst prennent environ 65 secondes chacun! Le profileur donne un total de ms / call 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 

A partir d’une recherche google:

http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/112910

J’espère que cela t’aides.

J’ai eu un problème similaire et j’ai trouvé que le mode passif augmentait la vitesse, par exemple. ftp.passive=true .

Essayez de supprimer le #sort! (Il suffit de mettre puts "files = #{files}" ) car cela peut coûter assez cher s’il y a un tas de fichiers dans le répertoire. Cela expliquerait le grand décalage autour du #nlst et du #ls