犯罪嫌疑人X
一个数组在理论上最多可以包含2,147,483,647个元素,因为它使用int进行索引。实际限制略低于此限制,具体取决于数组中包含的类型。但是,.NET CLR中最大单个对象限制为2GB,即使在64位中也是如此。这是设计使然。您可以轻松地实现一种IList<T>在内部保留多个数组并允许您扩展到超过2GB单个对象限制的实现,但是框架本身没有一个。但是,通常这不是一个真正的问题。大多数时候,您将拥有指向大型类的数组-因此该数组仅保存引用。这意味着您的阵列可以有效地指向许多GB的内存-但是阵列本身不能大于2GB。请注意,从.NET 4.5开始,有一个可供64位应用程序加入的新选项:gcAllowVeryLargeObjects。有了这个新的选项集,就可以UInt32.MaxValue在多维数组中获得(4,294,967,295)个元素,尽管一维数组仍限于2,146,435,071个元素(对于单字节数组或不包含任何字节的结构数组,则为2,147,483,591个元素) 。使用此选项的新规则是:数组中元素的最大数量为UInt32.MaxValue。对于字节数组和单字节结构数组,任何单个维度的最大索引为2,147,483,591(0x7FFFFFC7),对于其他类型,最大索引为2,146,435,071(0X7FEFFFFF)。字符串和其他非数组对象的最大大小不变。