c# - 当数组大小大于 Int32.MaxValue 时,.Length 行为与 .LongLength

标签 c# arrays

我正在寻找一些关于数组的 .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/

相关文章:

c# - 检测 azure 函数超时以将消息重新路由到应用程序服务计划

c# - 从 startup.cs 检查 token 有效性

java - 列表模式的长度

java - Collections.sort 有什么问题?

javascript - 如何根据属性键对值进行唯一和求和

c# - 将 async/await 与 DataReader 一起使用? (没有中间缓冲区!)

c# - 事件和方法之间的区别

java - 为什么 Java 中不能通过引用调整数组大小?

c# - System.Drawing.Image 异常

c++ - 如何将3D尺寸不固定的3D数组展平为1D数组?