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個不同的「modelcode」文件成千上萬的記錄,我一直在尋找不同的方法(即讀取文件夾中的所有內容的每個循環之前,因爲它不會在執行期間改變)。
這種方法是否會加快我的腳本,這也是正確的方法來實現這個嗎?
那麼你可以看看使用像ruby-prof這樣的東西來描述腳本,但一般來說,如果你每次點擊磁盤來檢查文件是否存在,它可能會成爲一個瓶頸。您可以閱讀整個目錄並存儲所有文件,然後查看它們。另一個選擇是緩存查找。因此,您在第一次查找時將磁盤命中,然後後續查找將更快。而且你不需要預先迭代所有品牌/模型。 – Doon
@Doon,這看起來不錯。你會爲每個文件創建一個新的對象,或者將所有文件存儲在一個散列中,例如{:model_foo =>「 ...」; :model_bar =>「 ......」}? – TopperH
模型文件有多大?他們的平均尺寸是多少,和/或最大尺寸是多少? –