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]です(上記のプットは一例です)キーが存在しない場合、ブロックが実行され、検索/入力されます。 の初期化子のブロック形式の詳細については、http://www.ruby-doc.org/core-2.0/Hash.htmlを参照してください。Hash

また、保存する必要がある場合は、modeldescrs をインスタンス変数にすることもできます。

于 2013-08-05T15:23:44.947 に答える