ruby - Ruby 的 CSV.open 是否缓冲到内存并一次写入?

标签 ruby csv buffer large-files

CSV.open 会在 block 退出时将数据存储在内存中并写入文件一次,还是自动分批写入?

require 'csv'

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

最佳答案

CSV.open 将在 block 关闭时写入底层操作系统,并且每次缓冲区填充和刷新时也会写入,这将自动发生。 (在我的 Ruby 安装中,它发生在 8196 字节处。)您还可以将 csv.flush 添加到您的 block 中以强制它按顺序写入。

require 'csv'

CSV.open('result.csv', 'wb') do |csv|
  while row = next_row
    csv << row  # Without flush, writes to underlying OS only when buffer fills
    csv.flush   # Adding this forces a write to underlying OS
  end
end             # Exiting block writes to underlying OS and closes file handle

(请注意,写入是针对底层操作系统,它可能会在实际写入磁盘之前再次缓冲流。)

关于ruby - Ruby 的 CSV.open 是否缓冲到内存并一次写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34168814/

相关文章:

ruby-on-rails - 使用 Rails 4.1 在 hstore 字段中选择单个属性

python - 在 python/pyqt 中有效编辑大型 csv 文件的某些记录

android - 为什么这个节拍器应用程序会崩溃? (安卓)

opengl - glBindBuffer 和 glBindBufferBase 之间的区别

java - 使用有界缓冲区(生产者/消费者)是否可以避免同步方法/死锁的痛苦?

ruby - rbenv install - 需要可执行主机 ruby

Ruby 无效多字节字符错误(2019 年 9 月)

mysql - 为数据库 Ruby on Rails 配置项目

ruby - CSV 处理 with1.9.2 - 使用选项哈希时,多行作为单个数组返回

java - 使用 Java 在浏览器中下载 CSV 文件