0

我在 rake 任务期间使用 ruby​​zip 解压缩一些文件,但我发现解压缩文件后使用的内存不可用。我必须重新启动服务器以回收内存。还有其他人有类似的问题吗?任何解决方法?

我正在使用与 github 上的示例相同的代码解压缩

https://github.com/rubyzip/rubyzip

Zip::File.open('foo.zip') do |zip_file|
  # Handle entries one by one
  zip_file.each do |entry|
    # Extract to file/directory/symlink
    puts "Extracting #{entry.name}"
    entry.extract(dest_file)

  end
end

任何建议将不胜感激!

4

1 回答 1

0

如果您必须对数据进行操作,您可以直接从 zip 存档中流式传输并一次使用一行。使用此代码,我对内存使用没有任何问题。

require 'csv'
require 'zip'

zip_file = Zip::File.open('foo.zip')
entry = zip_file.entries.first
puts "Extracting #{entry.name}"
CSV.parse(entry.get_input_stream, headers: true) do |row|
  # do something with row
  p row
end

编辑:

您可以遍历流(不限于解析 CSV):

entry.get_input_stream.each do |line|
   p line
end
于 2015-02-17T14:15:01.283 回答