我从某人那里听说.NET中最大的数组大小是4 GB?只是想知道这是否属实。您不会梦想在32位.NET上执行此操作,但是在具有12 GB RAM的64位系统上,也许您可能想要这样做。 : - )
答案 0 :(得分:39)
理论上,一个数组最多可以包含2,147,483,647个元素,因为它使用int进行索引。实际限制略低于此值,具体取决于数组中包含的类型。
但是,.NET CLR中最大单个对象限制为2GB,即使是64位也是如此。这是done by design。
您可以轻松地在内部创建一个IList<T>
实现,保留多个数组,并允许您超过2GB单个对象限制,但框架本身没有。
然而,通常情况下,这不是一个真正的问题。大多数情况下,你会有指向大类的数组 - 所以数组只是持有引用。这意味着您的阵列可以有效地指向许多GB内存 - 但阵列本身不能超过2GB。
请注意,从.NET 4.5开始,有一个新选项可供64位应用程序选择加入:gcAllowVeryLargeObjects。使用这个新选项集,可以在多维数组中获得UInt32.MaxValue
(4,294,967,295)个元素,尽管单维数组仍然限制为2,146,435,071个元素(单个字节数组的2,147,483,591或包含结构的数组)没什么特别的)。
使用此选项的新规则是:
答案 1 :(得分:6)
在4.5之前的.NET版本中,最大对象大小为2GB。从4.5开始,如果启用gcAllowVeryLargeObjects,您可以分配更大的对象。请注意,string
的限制不受影响,但“数组”也应该包含“列表”,因为列表由数组支持。
答案 2 :(得分:0)
.NET中任何一个对象的最大大小为2GB。
当然,这会对你制作原始数组的大小设置一个硬性限制。
你可以创建一个“数组数组”(甚至可以创建自己的索引器来访问它们,就像它是一个连续的数组一样),如果你为它定义自己的类,它就像你想要的一样大。