当数组大小大于Int32.MaxValue时,.Length行为与.LongLength
本文关键字:Length LongLength MaxValue 数组 小大 大于 Int32 | 更新日期: 2023-09-27 18:27:43
我正在寻找一些关于数组的.Length和.LongLength属性之间差异的文档。
具体来说,如果数组的长度大于Int32.MaxValue,将.length抛出异常,返回Int32.MaxValue,为负数,返回0?
(为了消除"可能重复"的问题:我不是在问数组的最大长度或.NET CLR对象的最大大小。假设是64位系统和支持大型对象的CLR版本)
不可能创建元素数超过2147483591的一维数组(相比之下,int.MaxValue
为2147483647)。如果试图创建一个包含更多元素的数组,则抛出OutOfMemoryException
。这意味着LongLength
属性仍然无用,您可以使用Length
属性。
我已经使用.NET 4.5在x64平台上进行了测试。为了创建包含2147483591个元素的阵列,我修改了配置文件并添加了:
<configuration>
<runtime>
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
</configuration>
基本上,我使用这个MSDN页面来启用总大小大于2(GB)的阵列。阵列的实际限制:
任何单个维度中的最大索引为2147483591(0x7FFFFFC7),用于字节阵列和单字节结构的阵列,以及2146435071(0X7FEFFFFF)用于其他类型。