ruby - 什么时候不应该在 Ruby 中使用 to_sym?

标签 ruby string symbols string-interning

我有一个来自分析提供商的大型数据集。

它以 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/

相关文章:

ruby - 为什么没有更多的项目使用 Ruby Symbols 而不是 Strings?

java - 如何优化此方法以将字符串分成 block ?

javascript - 匹配任何不是字符串 "ABCD"的正则表达式

scala - 在 Scalatest 中使用什么代替符号?

ruby - 从另一个符号数组填充一个新数组

perl - 在 perl 中用引号打印 @

ruby-on-rails - 合并视频、音频和图像文件的最简单方法是什么?

Ruby on Rails 相当于 actionscript

ios - Jenkins iOS faSTLane 构建 : Could not find 'bundler'

python - 正则表达式在另一个词之前添加字符(来自选择列表)