2013-12-18 98 views
0

我有一個腳本寫道一連串的數字上線一百萬次。 ruby寫入文件的最快方法是什麼?現在我計算,要花費大約21個小時才能寫出2.58億行到這個文件。這也將是大約8-15GIG。有什麼建議麼 ?最快的方式來寫大文件

def log_file(text) 
    File.open(File.join("combo_numbers.txt"), 'a+') do |f| 
    f.write("#{number}\n") 
    end 
end 


250000000.times do 
    # math_answer =[] 
    # math_answer = math 
    log_file(math_answer) 
end 
+0

有可能是通過開打了性能和關閉每個寫入文件。你可以打開文件一次,寫入文件持續時間,並在最後關閉它? – Joe

回答

0

你可以寫,只有打開文件一次,而不是重新打開它的每一個細小的日誌類寫

class Logger 

    def initialize path, mode = "w" 
    @path = path 
    @mode = mode 
    end 

    def write data 
    handle.write data + "\n" 
    end 

    private 

    def handle 
    @f ||= File.open(@path, @mode) 
    end 

    def close 
    @f && @f.close 
    end 

end 

使用

logger = Logger.new "combo_numbers.txt" 

250_000_000.times do 
    logger.write "foo" 
end 

logger.close 
+0

出於好奇:文件會在這裏與應用程序一起打開嗎? – BroiSatse

+1

BroiSatse:從IO#關閉(文件繼承自)的文檔:I/O流在被垃圾回收器聲明時自動關閉。 – bloopletech

+0

@BroiSatse,bloopetech是正確的,ü我無論如何都添加了一個明確的'.close' –

相關問題