字节[]的最大长度?
Posted
技术标签:
【中文标题】字节[]的最大长度?【英文标题】:Maximum length of byte[]? 【发布时间】:2011-04-26 01:14:00 【问题描述】:我正在尝试创建一个长度为UInt32.MaxValue
的byte
s 数组。这个数组本质上是一个小的(ish)内存数据库:
byte[] countryCodes = new byte[UInt32.MaxValue];
然而,在我的机器上,在运行时,我收到了一个 System.OverflowException
,其中包含“算术运算导致溢出”。
有什么关系?我需要使用unsafe
块和malloc
吗?我将如何在 C# 中做到这一点?
【问题讨论】:
我不知道有这么多国家! 【参考方案1】:System.Array
的当前实现使用Int32
作为其所有内部计数器等,因此理论上最大元素数为Int32.MaxValue
。
Microsoft CLR 还规定了每个对象最大大小为 2GB 的限制。
这里有一个很好的讨论和解决方法...
BigArray<T>, getting around the 2GB array size limit这里还有一些相关的、不完全重复的问题和答案......
Is there a limit of elements that could be stored in a List ? Very large collection in .Net causes out-of-memory exception what is the max limit of data into list in c#?【讨论】:
【参考方案2】:在 .NET 4.5 上,字节数组的最大可实例化长度为:2147483591,即比 int.MaxValue 小 56。通过以下方式找到:
for (int i = int.MaxValue; i > 0; i--)
try
byte[] b = new byte[i];
Console.Out.WriteLine("MaxValue: " + i);
Environment.Exit(0);
catch (Exception ignored)
【讨论】:
【参考方案3】:字节数组的最大长度为:2130702268。 例如:
var countryCodes = new byte[2130702268];
【讨论】:
【参考方案4】:我一开始不会这样做。为什么要为这个内存数据库留出所有内存?您不想要一个随着您的进行而大小增加的数据结构(例如List<int>
)吗?或者(如果愿意)使用像sqlite 这样的内存数据库?
【讨论】:
以上是关于字节[]的最大长度?的主要内容,如果未能解决你的问题,请参考以下文章
DatabaseError: (1071, '指定的密钥太长;最大密钥长度为 767 字节')