几周前,我编写了一个简单的Ruby脚本来测试Windows XP环境中的几个FTP命令。一切都按预期工作,我甚至都不知道代码运行所花费的时间(我猜最多只需3-4秒。)
几天前,我正在开发的更多涉及的Ruby应用程序开始运行得非常慢。在调查问题时,我将问题与FTP命令隔离开来。我现在重新运行原始测试脚本,运行需要两个分钟。命令行FTP本质上是即时的。
ruby目录结构中没有文件被更改。我不相信任何新的应用程序已经安装 - 当然没有其他应用程序正在运行。
任何人都可以建议为什么以下代码应该运行得这么慢?手动计算print
语句之间的时间间隔表明nlst
和ls
每个约需65秒!对于nlst
而言,探查器的总ms /呼叫总数为16,而ls
则为31。
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 :(得分:4)
答案 1 :(得分:2)
我有一个类似的问题,发现被动模式提高了速度,例如。 ftp.passive=true
。
答案 2 :(得分:0)
尝试删除#sort!
(只是puts "files = #{files}"
),因为如果目录中有大量文件,这可能相当昂贵。这将考虑到#nlst
和#ls