0

我试图找出 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 个不同的“模型代码”文件,我正在寻找一种不同的方法,在每个循环之前读取文件夹的所有内容(因为它在执行期间不会改变)。

这种方法会加快我的脚本速度吗,这也是实现它的正确方法吗?

4

1 回答 1

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]在需要时访问(上面的 puts 是一个示例),如果密钥不存在,则将执行该块并查找它/填充它。 有关初始化程序的块形式的更多信息,请参见http://www.ruby-doc.org/core-2.0/Hash.htmlHash

如果需要保存,您也可以将 modeldescrs 设为实例变量。

于 2013-08-05T15:23:44.947 回答