数组中的Outofmemory异常

Sam*_*wal 1 c# arrays out-of-memory

我想制作一个大小为10 ^ 9个元素的数组,其中每个元素可以是相同大小的整数.我总是得到一个OutOfMemoryException初始化线.我怎样才能做到这一点?

如果无法做到这一点,请建议其他策略?

Cod*_*aos 6

在.net 4.0或更早版本中,阵列限制为2GB,即使在64位进程中也是如此.因此,对于十亿个元素,支持的最大元素大小是两个字节,但是一个int是四个字节.所以这不会奏效.

如果你想拥有一个更大的集合,你需要自己编写,由多个数组支持.

在.net 4.5中可以避免这种限制,请参阅Jon Skeet的详细答案.


Jon*_*eet 5

假设您的意思int是元素类型,如果您使用的是64位CLR,则可以使用.NET 4.5执行此操作.

您需要使用<gcAllowVeryLargeObjects>配置设置.默认情况下启用此功能.

如果您使用的是较旧的CLR,或者您使用的是32位计算机,则表示运气不佳.当然,如果你是一个64位的机器,但只是一个旧版本的CLR,你可以封装你的"一个大阵"到一个单独的对象,它具有较小的阵列列表...你甚至可以实现IList<int>这因此大多数代码都不需要知道你并没有真正使用单个数组.

(正如评论中所指出的,你仍然只能创建一个包含2 31个元素的数组;但是你需要10 9个元素.)