我有一个来自分析提供商的大型数据集。
它以 JSON 格式到达,我将其解析为散列,但由于集合的大小,我的内存使用量激增。几乎所有内容都以字符串开头(一些值是数字),当然键会重复很多次,许多值也会重复。
所以我在想,为什么不将所有(非数字)值也符号化呢?
我发现了一些关于潜在问题的讨论,但我认为最好对 Ruby 进行全面的描述,因为这些问题似乎取决于实习过程的实现(当您对字符串进行符号化时会发生什么)。
我发现这是在谈论 Java: Is it good practice to use java.lang.String.intern()?
- 实习过程可能很昂贵
- 永远不会取消分配驻留字符串,从而导致内存泄漏
(除了最后一点有一些争论。)
那么,谁能详细解释什么时候不应该在 Ruby 中实习字符串?
最佳答案
- 当所讨论的事物列表是一个开放集(即动态的,没有固定的 list )时,您不应将它们转换为符号。创建的每个符号都不会被垃圾回收,并且会导致内存泄漏。
- 当所讨论的事物列表是封闭集(即静态的,具有固定的 list )时,您最好将它们转换为符号。每个符号只会创建一次,并且会被重复使用。这将节省内存。
关于ruby - 什么时候不应该在 Ruby 中使用 to_sym?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16289455/