容量大于Int.MaxValue的C#数组

容量大于Int.MaxValue的C#数组,c#,arrays,structure,C#,Arrays,Structure,我想知道C#中是否有任何结构可以包含超过Int.MaxValue对2147483647项的限制,以防信息集非常大。是否必须使用多级阵列执行此操作?或者您可以创建一个最大长度为Long.MaxValue的数组吗?如果是,如何使用?非常少的计算机将有足够的内存来存储这种结构。ArrayList可以包含超过Int.MaxValue的内容。如果索引器是long(int64)而不是int32,则只能使用基于索引的结构 即使是a也不能工作,因为索引器是int32您的要求是什么?很难相信一个元素比这个多的数组

我想知道C#中是否有任何结构可以包含超过Int.MaxValue对2147483647项的限制,以防信息集非常大。是否必须使用多级阵列执行此操作?或者您可以创建一个最大长度为Long.MaxValue的数组吗?如果是,如何使用?

非常少的计算机将有足够的内存来存储这种结构。

ArrayList可以包含超过Int.MaxValue的内容。

如果索引器是
long
(int64)而不是
int32
,则只能使用基于索引的结构


即使是a也不能工作,因为索引器是
int32

您的要求是什么?很难相信一个元素比这个多的数组是解决任何现实问题的正确方法,不管它是否合法。您可能会在这里想到一个数据库,不管是持久化的还是内存中的。这是组织大型数据集的标准方法。

CLR目前对任何单个对象都有2GB的限制-因此您必须使用多个数组构建它,即使对于
字节的元素类型也是如此。但这应该是可行的。大多数正常的收集接口都会失败,因为它们使用
int
进行索引、计数等


我相信CLR本身并不局限于一个可以防止这种情况发生的总体进程限制,尽管您几乎肯定希望在64位CLR和操作系统上运行。

已经完成,一个示例
BigArray
实现。

如果您计划创建这种大小的阵列,你可能应该重新考虑你的方法。想要构建下一个Twitter?多级阵列可以做到这一点,但存在内存不足的风险。你需要它做什么?我在寻找一种解决方案,将圣经的数据保存在数组或列表中,但看起来我无法获得我想要的所有信息…因为我需要每个希腊单词,每个希伯来语单词,每个英语强数单词的元素,如果突出显示,etcA数据库解决方案更有可能成为未来的发展方向。就这点而言,将事物分解到单词层面是不寻常的(除了一些研究希伯来语的Qaballic方法),因为你会失去不同经文之间的联系,因为翻译不是单词的1-1,而是经文的1-1。不,它不能,因为构造器只取整数作为容量,因此不能超过Int32。MaxValue@Richard:您的逻辑并不完全正确,因为容量会自动增加。您可以提供
int.MaxValue
,然后添加更多项目。我很确定ArrayList仍然会失败,但这不仅仅是因为你不能将构造函数的最终容量指定为初始容量。是的,我就是这么想的……哦,好吧,看起来我需要减少信息量。这有点奇怪,因为System.Array上的GetValue超负荷,需要很长的索引,这表明你可能有更大的数组()@Rune:是的-我同意这很奇怪。可能有点过早的设计。@LukeH-是的,当他们没有添加任何东西(除了误导不幸的人)时,这就是奇怪的部分,为什么要添加它们。在实际支持它们的时候添加它们并不是一个突破性的改变。(删除它们当然不会)
private readonly int[]\u arrInts=new int[IntMax]引发System.OutOfMemoryException。其中as
private const int IntMax=int.MaxValue。知道为什么吗?@barnes:这是在尝试创建一个8GB大小的阵列。。。我相信现在有一个超过2GB限制的设置,但它是否允许8GB阵列,我不知道…酷!谢谢你给我这个链接@SLaks,那么也许我应该补充一点:很少有计算机会在内存中处理这种结构
抛出一个
系统.OutOfMemoryException
。其中
private const int IntMax=int.MaxValue。知道为什么吗?