【问题标题】:Is there a limit on the size of an array in ruby? [duplicate]ruby 中数组的大小有限制吗? [复制]
【发布时间】:2023-04-02 05:55:02
【问题描述】:

可能重复:
Array size too big - ruby

很抱歉,如果有人问过这个问题,我环顾四周,但没有真正找到我要找的东西。

我正在使用 ruby​​ 和 mysql 根据 mysql 表中的单个列创建一个数组。例如,假设我有一列用户名:

 users = []
 users.clear
 
 # Update the list of users to follow
 res = dbh.query("SELECT user FROM usernameDB")
 while row = res.fetch_row do
   users << row[0] #adds each user to the array
 end

到目前为止,当我们开始接收更多用户时,这一直运行良好。现在代码给了我未知的错误。

为了排除故障,我只是将其中的大部分内容注释掉,并只用几个用户名构建了数组,然后一切都恢复了。所以我的问题是,ruby 数组中的数量或项目是否有限制?

谢谢!

【问题讨论】:

  • 你能报告“未知错误”吗?
  • 我也有类似的问题。我正在使用来自 ActiveRecord 查询的数据构建一个数组,并且在某些大尺寸下它会失败或超时。就像其他人提到的那样,并不是数组太大 - 一定有其他事情发生。我的数组的总长度应该是数千,而不是数百万......

标签: ruby arrays


【解决方案1】:

Ruby 没有对软件施加限制,但对进程可以支持的程度有限制。如果您有一个运行 Ruby 服务器的常规家庭服务器,它将能够处理一个数组,直到数组变得太大,此时它将开始“陷入困境”、滞后、崩溃等。另一方面,如果你有一个非常强大的企业服务器,它可以处理一个更大的阵列,但如果阵列变得太大而无法处理进程和硬件(内存),它最终仍然会崩溃/滞后。

我没有具体的数字给你,因为这完全取决于服务器上的硬件和软件。

【讨论】:

  • 它在dreamhost上运行。抱歉,如果这是错误的答案,我一般对 ruby​​ 有点不满意。
  • 没问题。这真的取决于 Dreamhost 为其服务器提供的资源。我认为您可以构建一个大尺寸的数组,但任何包含许多项目的东西都可能太多了。只需猜测并检查 - 如果您收到来自 Dreamhost 的电子邮件,询问他们的服务器资源去向,请不要说出我的名字! :)
【解决方案2】:

看看另一个帖子:Array size too big - ruby。 6亿的规模太大了,但5亿工作。

您使用的数组有多大?问题可能是您的内存不足!

【讨论】:

  • 表中有 436 行,所以我尝试构建一个包含 436 个用户名的数组。
  • 436 个用户名不算什么。肯定有其他事情发生。
  • 听起来还不错。如果使用SELECT TOP 50 将查询返回的结果数限制为 50 个左右,它还会崩溃吗?
  • 我开始玩极限了。在 100 时它运行良好,在 200 时它运行良好,在 400 时它再次出错,所以我将它设置为 350 并且它运行良好。经过一些缩小后,它似乎工作正常,直到我将限制设置为 354。我检查了数据库中的那个条目,它看起来很好。
  • 嗯,可以肯定的是,这不是因为 ruby​​ 对数组长度施加了一些限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-18
  • 1970-01-01
相关资源
最近更新 更多