我有一些Ruby正在下载大型XML文件(约380MB)。
我正在使用on_body
来批量下载:
to = File.open('/path', 'wb')
http = HTTPI::Request.new(options)
http.url = uri
http.on_body { |chunk| to.write(chunk) }
HTTPI.get(http, :net_http)
to.close
on_body
,根据其文档(https://www.rubydoc.info/gems/httpi/HTTPI/Request#on_body-instance_method)将分块读取响应,以防止占用内存。
这似乎可行,实际上下载文件后,我的内存使用量跃升了约178 MB,因此在流式传输文件时似乎发生了一些垃圾回收,否则我希望它会因整个文件而跳跃大小。
但是,后遗症,那178MB只是永远挂了。
由于文件下载,我将其范围缩小了。如果我从磁盘读取相同的XML文件,则在处理完文件后,内存仅增加了约4MB。