2015-12-09 152 views
4

CSV.openCSV.open將數據存儲在內存中並在塊退出時寫入文件一次,否則它會自動寫入很多批次?Ruby的CSV.open緩衝區是否可以一次寫入內存?

require 'csv' 

CSV.open('result.csv', 'wb') do |csv| 
    while row = next_row 
    csv << row 
    end 
end 
+1

我通過運行'CSV.open(「富」測試此,「WB '){| x |循環{x << [1,2,3]; sleep 0.001}}'並在另一個shell中觀看'foo'的文件大小。每〜3秒緩衝區填滿8196字節並寫入磁盤。 –

回答

5

CSV.open將寫入基礎OS當塊關閉,並且它也將每寫緩衝區滿和刷新的時間,這會自動發生。 (在我的Ruby安裝中,它發生在8196字節處)。您還可以將csv.flush添加到您的塊,以強制它按順序寫入。

require 'csv' 

CSV.open('result.csv', 'wb') do |csv| 
    while row = next_row 
    csv << row # Writes to underlying OS only when buffer fills 
    csv.flush # Forces write to underlying OS 
    end 
end    # Writes to underlying OS and closes file handle 

(請注意,寫入是到底層操作系統,其可以實際寫入磁盤之前再次緩衝流。)

相關問題