内容简介:翻译自:https://stackoverflow.com/questions/17153194/why-does-repeated-json-parsing-consume-more-and-more-memory
似乎在 Ruby 中一遍又一遍地解析相同的JSON文件会占用越来越多的内存.
考虑下面的代码和输出:
>为什么在第一次迭代后没有释放内存?
>解析后,为什么116MB JSON文件会占用1.5Gb的RAM?考虑到文本文件被转换为哈希值,这是令人惊讶的.我在这里想念的是什么?
码:
require 'json'
def memused
`ps ax -o pid,rss | grep -E "^[[:space:]]*#{$$}"`.strip.split.map(&:to_i)[1]/1024
end
text = IO.read('../data-grouped/2012-posts.json')
puts "before parsing: #{memused}MB"
iter = 1
while true
items = JSON.parse(text)
GC.start
puts "#{iter}: #{memused}MB"
iter += 1
end
输出:
before parsing: 116MB 1: 1840MB 2: 2995MB 3: 2341MB 4: 3017MB 5: 2539MB 6: 3019MB
当Ruby解析JSON文件时,它会创建许多中间对象来实现目标. GC开始工作之前,这些对象会保留在内存中.
如果JSON文件具有复杂的结构,许多数组和内部对象,那么数字也会快速增长.
您是否尝试调用“GC.start”来建议Ruby清理未使用的内存?如果内存量
显着减少,它建议只是用于解析数据的中间对象,否则,您的数据结构很复杂,或者您的数据存在lib无法解除分配的内容.
对于大型JSON处理,我使用yajl-ruby( https://github.com/brianmario/yajl-ruby ).它是C实现的,占用空间小.
翻译自:https://stackoverflow.com/questions/17153194/why-does-repeated-json-parsing-consume-more-and-more-memory
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 【Android】性能优化:电量消耗统计
- 优化 DeFi 合约利息计算 gas 消耗
- MySQL 导致 CPU 消耗过大,如何优化
- 为什么系统调用会消耗较多资源
- iOS 电量消耗改善:一招套路及相关姿势
- HBase 写吞吐场景资源消耗量化分析及优化
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
父与子的编程之旅
桑德 (Warren Sande)、桑德 (Carter Sande) / 苏金国、易郑超 / 人民邮电出版社 / 2014-10-1 / CNY 69.00
本书是一本家长与孩子共同学习编程的入门书。作者是一对父子,他们以Python语言为例,详尽细致地介绍了Python如何安装、字符串和操作符等程序设计的基本概念,介绍了条件语句、函数、模块等进阶内容,最后讲解了用Python实现游戏编程。书中的语言生动活泼,叙述简单明了。 为了让学习者觉得编程有趣,本书编排了很多卡通人物及场景对话,让学习者在轻松愉快之中跨入计算机编程的大门。 第 2 版新增内......一起来看看 《父与子的编程之旅》 这本书的介绍吧!