我有一个来自分析提供商的大型数据集。
它到达JSON并将其解析为散列,但由于集合的大小,我正在膨胀到内存使用量的演出。几乎所有东西都以字符串开头(一些值是数值),当然,密钥重复多次,但很多值也会重复。
所以我在思考,为什么不象征所有(非数字)值呢?
我发现了一些潜在问题,但我认为对Ruby有一个全面的描述会很好,因为问题似乎取决于实习过程的实现(当你象征一个字符串时会发生什么)。
我发现这是在谈论Java: Is it good practice to use java.lang.String.intern()?
(除了最后一点有争议。)
那么,任何人都可以详细解释何时不在Ruby中实习字符串?
答案 0 :(得分:4)
答案 1 :(得分:1)
实习过程可能很昂贵
我们必须选择在内存和计算能力之间进行权衡。因此,请尝试一些最佳做法并进行基准测试,以找出适合您的方法。我想提一些建议。
符号是哈希键的绝佳选择
{name: "my name"}
冻结字符串以节省内存,尝试保留小的字符串池
person[:country] = "USA".freeze
在Ruby GC调优方面很有趣。
永远不会取消分配内部字符串,从而导致内存泄漏