在 Ruby 中,数组的大小有限制吗?

11

可能重复:
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数组中的项目数量是否有限制?

谢谢!


2
你能报告“未知错误”吗? - knut
我有一个类似的问题。我正在使用ActiveRecord查询中的数据构建一个数组,在某些较大的大小时它会失败或超时。正如其他人所提到的,这并不是因为数组太大了 - 必须有其他原因。我的数组总长度应该最终达到数千,而不是数百万... - Drew
2个回答

7
Ruby没有软件限制,但是进程支持的数据量是有限制的。如果你在家里的服务器上运行Ruby服务器,它可以处理一个数组直到这个数组变得太大,此时它会开始变慢、崩溃等。另一方面,如果你有一台非常强大的企业服务器,它可以处理更大的数组,但是如果数组变得太大,进程和硬件(内存)无法处理,它仍然会最终崩溃/变慢。

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


它正在Dreamhost上运行。如果答案不正确,抱歉,我对Ruby还不太熟悉。 - bradleygriffith
没问题。这真的取决于Dreamhost在他们的服务器上拥有什么资源。我认为你可以构建一个很大的数组,但是任何包含许多项目的东西可能太多了。只需猜测并检查 - 如果您收到来自Dreamhost的电子邮件询问他们的服务器资源去哪里,请不要提到我的名字! :) - dwmcc

4

看一下这篇文章:Array size too big - ruby。尝试使用 5 亿大小的数组没有问题,但是 6 亿大小的数组会出现问题。

你正在处理多大的数组呢?可能的问题是你的内存不足!


表中有436行,因此我正在尝试构建一个包含436个用户名的数组。 - bradleygriffith
4
436个用户名并不是问题的全部。一定还有其他事情发生了。 - Mchl
这听起来还不错。如果您使用 SELECT TOP 50 来限制查询返回的结果数量,它是否仍会崩溃? - danmcardle
我开始尝试限制。在100的时候它工作得很好,在200的时候也很好,在400的时候又出现了错误,所以我将其设置为350,然后它又正常工作了。经过一些缩小范围的尝试,似乎它一直工作得很好,直到我将限制设置为354。我检查了数据库中的条目,看起来没有问题。 - bradleygriffith
1
当然,这并不是由于 Ruby 对数组长度的限制。 - danmcardle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接