Ruby FTP очень медленно работает под Windows XP - PullRequest
3 голосов
/ 17 мая 2009

Пару недель назад я написал простой скрипт на Ruby для проверки нескольких команд FTP в среде Windows XP. Все работало так, как ожидалось, и я даже не знал, сколько времени потребовалось для запуска кода (я бы предположил, что самое большее 3-4 секунды).

Несколько дней назад гораздо более сложное Ruby-приложение, которое я разрабатываю, начало работать очень медленно. Когда я исследовал проблему, я изолировал проблему с командами FTP. Теперь я перезапустил оригинальный тестовый сценарий, и его запуск занимает более двух минут . FTP командной строки по существу мгновенный.

Нет файлов в структуре каталогов ruby ​​были изменены. Я не верю, что какие-либо новые приложения были установлены - конечно, никакие другие приложения не работают.

Кто-нибудь может подсказать, почему следующий код должен работать так медленно? Временная привязка интервалов между операторами print позволяет предположить, что nlst и ls занимают около 65 секунд каждый! Профилировщик дает гораздо более правдоподобную общую мс / вызов 16 для nlst и 31 для 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

Ответы [ 3 ]

4 голосов
/ 19 мая 2009

Из поиска Google:

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

Надеюсь, это поможет.

2 голосов
/ 28 сентября 2009

У меня была похожая проблема, и я обнаружил, что пассивный режим увеличил скорость, например. ftp.passive=true.

0 голосов
/ 17 мая 2009

Попробуйте удалить #sort! (просто puts "files = #{files}"), поскольку это может быть довольно дорого, если в каталоге есть куча файлов. Это объясняет большую задержку вокруг #nlst и #ls

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...