我正在试图找出ruby脚本的瓶颈在哪里。我怀疑它可能会发生,因为脚本解析数千行,并且对于每一行,它会检查磁盘中是否存在某个文件并最终读取其内容。
def sectionsearch(brand, season, video)
mytab.trs.each_with_index do |row, i|
# ...some code goes here...
f = "modeldesc/" + brand.downcase + "/" + modelcode + ".html"
if File.exist?(f)
modeldesc = File.read(f)
else
modeldesc = ""
end
# ...more code here...
end
end
鉴于数千条记录的文件代码文件不超过30个,我正在寻找一种不同的方法,在每次循环之前读取文件夹的所有内容(因为它不会在执行)。
这种方法是否会加速我的脚本,这也是实现这一目的的正确方法吗?
答案 0 :(得分:1)
我可能会做一些类似哈希(传递一个块)的东西来检查未知密钥上的文件:
def sectionsearch(brand, season, video)
modeldescrs = Hash.new do |cache, model|
if File.exist?(model)
cache[model] = File.read(model)
else
cache[model] = ''
end
end
mytab.trs.each_with_index do |row, i|
# ...some code goes here...
f = "modeldesc/" + brand.downcase + "/" + modelcode + ".html"
puts modeldescrs[f]
# ...more code here...
end
end
然后只需在需要时访问modeldescrs[f]
(上面的看法就是一个例子)如果密钥不存在,那么该块将被执行并且它将查找/填充它。有关Hash
如果需要保存,你可以让modeldescrs成为一个实例变量。