数组的最大容量是多less?

在C#2008中,数组的最大容量是多less?

System.Int32.MaxValue 

假设你的意思是System.Array ,即。 任何正常定义的数组( int[]等)。 这是数组可以容纳的最大值。 每个值的大小仅受限于可用于保存它们的内存或虚拟内存量。

这个限制是强制的,因为System.Array使用Int32作为索引器,因此只能使用Int32的有效值。 除此之外,只能使用正值(即>= 0 )。 这意味着数组大小的绝对最大上限是Int32.MaxValue可用的Int32值的绝对最大上界,等于2 ^ 31,或大约20亿。

完全不同的一点是,如果你担心这个问题,那么很可能你正在使用大量的数据,不pipe是正确的还是错误的。 在这种情况下,我会考虑使用一个List<T>而不是一个数组,所以你只需要使用尽可能多的内存。 事实上,我build议一直使用List<T>或其他通用集合types。 这意味着只有尽可能多的内存将被分配,但是您可以像使用普通数组一样使用它。

另外一个注释集合是Dictionary<int, T> ,你可以像普通的数组一样使用,但是只会被稀疏地填充。 例如,在下面的代码中,只会创build一个元素,而不是数组创build的1000个元素:

 Dictionary<int, string> foo = new Dictionary<int, string>(); foo[1000] = "Hello world!"; Console.WriteLine(foo[1000]); 

使用Dictionary还可以控制索引器的types,并允许使用负值。 对于绝对最大尺寸的稀疏数组,你可以使用Dictionary<ulong, T> ,这将提供比你想象的更多的潜在元素。

每MSDN它是

默认情况下,数组的最大大小是2千兆字节 (GB)。

在64位环境中,可以通过在运行时环境中将gcAllowVeryLargeObjectsconfiguration元素的启用属性设置为true来避免大小限制。

不过,arrays总数仍将限制在40亿个元素

请参阅http://msdn.microsoft.com/en-us/library/System.Array(v=vs.110).aspx

注意:这里我把重点放在数组的实际长度上,假设我们有足够的硬件RAM。

这个答案是关于.NET 4.5的

根据MSDN ,字节数组的索引不能大于2147483591.对于4.5之前的.NET,它也是一个数组的内存限制。 在.NET 4.5中,这个最大值是相同的,但对于其他types,它可以达到2146435071。

这是说明的代码:

  static void Main(string[] args) { // ----------------------------------------------- // Pre .NET 4.5 or gcAllowVeryLargeObjects unset const int twoGig = 2147483591; // magic number from .NET var type = typeof(int); // type to use var size = Marshal.SizeOf(type); // type size var num = twoGig / size; // max element count var arr20 = Array.CreateInstance(type, num); var arr21 = new byte[num]; // ----------------------------------------------- // .NET 4.5 with x64 and gcAllowVeryLargeObjects set var arr451 = new byte[2147483591]; var arr452 = Array.CreateInstance(typeof(int), 2146435071); var arr453 = new byte[2146435071]; // another magic number return; } 

以下是对您的问题的详细解答: http : //www.velocityreviews.com/forums/t372598-maximum-size-of-byte-array.html

您可能想要提及您正在使用哪个版本的.NET和您的内存大小。

你会坚持到2G,为你的应用程序,但限制,所以这取决于你的数组中。

由于长度是一个int我会说Int.MaxValue

我想如果你不考虑虚拟机,那就是Integer.MaxValue

我认为它与你的RAM(或者可能是虚拟内存)的空间有关,并且对于你的操作系统版本(例如32位或者64位)