我在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
如有任何建议,我们将不胜感激!
如果必须对数据进行操作,可以直接从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