多次从磁盘读取可能会导致瓶颈

时间:2013-08-05 14:57:05

标签: ruby

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

这种方法是否会加速我的脚本,这也是实现这一目的的正确方法吗?

1 个答案:

答案 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

初始化程序的块形式的详细信息,请参阅http://www.ruby-doc.org/core-2.0/Hash.html

如果需要保存,你可以让modeldescrs成为一个实例变量。