我正在寻找一些关于数组的 .Length 和 .LongLength 属性之间差异的文档。
具体来说,如果数组的长度大于 Int32.MaxValue,.Length 是否会抛出异常,返回 Int32.MaxValue,变为负值,返回 0?
(消除“可能的重复”问题:我不是在询问数组的最大长度,或 .NET CLR 对象的最大大小。假设一个 64 位系统和一个支持大对象的 CLR 版本)
最佳答案
无法创建包含超过 2,147,483,591 个元素的一维数组(为了比较,int.MaxValue
为 2,147,483,647)。如果尝试创建包含更多元素的数组,则会抛出 OutOfMemoryException
。这意味着 LongLength
属性仍然无用,您可以改用Length
属性。
我已经使用 .NET 4.5 在 x64 平台上对其进行了测试。为了创建包含 2,147,483,591 个元素的数组,我修改了配置文件并添加了:
<configuration>
<runtime>
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
</configuration>
基本上,我用这个MSDN page启用总大小大于 2 (GB) 的数组。数组的真正限制:
The maximum index in any single dimension is 2,147,483,591 (0x7FFFFFC7) for byte arrays and arrays of single-byte structures, and 2,146,435,071 (0X7FEFFFFF) for other types.
关于c# - 当数组大小大于 Int32.MaxValue 时,.Length 行为与 .LongLength,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34405185/