如何解决声明为最大大小的数组在C#
我知道类似的问题已经问了很多遍,并且也得到了回答。
互联网上的许多文章仅指向一个答案。最高int
或2147483647
。
内联是来自stackoverflow的几个链接:
What is the Maximum Size that an Array can hold?
Maximum size of string array in C#
但是,当我尝试检查相同内容时,会抛出OutOfMemoryException
。实际上,我尝试将大小减小2到1073741823
(抛出异常),将大小减小4到536870911
(抛出异常),将大小减小8到268435455
(程序执行毫无例外)。
测试代码:
using System;
namespace ConsoleApp
{
class Program
{
static void Main()
{
int arraySize = Int32.MaxValue / 1; //Factor when set to 8,program executes without any exception
int[] testArray = new int[arraySize];
testArray[0] = 6;
Console.WriteLine("Press Enter to finish.");
Console.ReadLine();
}
}
}
看起来所有其他答案都指向一个理论值,即2147483647。但是,实际上并非总是如此。因此,问题是,鉴于应用程序代码非常简单,只需一个数组和几次控制台调用,是否有可能弄清楚应用程序将抛出OutOfMemoryException的数组大小。
解决方法
.NET框架默认将任何对象的最大大小限制为2 GB。如果启用相应的设置gcAllowVeryLargeObjects,则在64位平台上,数组可能会更大。
因此,从理论上讲,int
数组的限制应该在536 870 912个元素左右,但这不能解决数组本身的内存占用问题,因此实际限制必须更少。
另一个问题是需要在 contiguous 内存空间中分配数组。如果分配器找不到任何这样的空间,即使对象小于最大大小限制,您也会得到OutOfMemoryException
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。