我在rake任务期间使用rubyzip解压缩一些文件,但我发现在解压缩文件后所使用的内存不可用。我必须重新启动服务器才能回收内存。其他人有类似问题吗?任何解决方法?
我使用与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
任何建议都将不胜感激!
答案 0 :(得分: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