我想知道在C#中是否有任何结构可以容纳超过Int.MaxValue(2,147,483,647)限制的极大信息集,以处理真正大规模的数据。这是否必须使用多级数组来完成?或者你能否创建一个具有Long.MaxValue最大长度的数组?如果可以,如何实现?
我想知道在C#中是否有任何结构可以容纳超过Int.MaxValue(2,147,483,647)限制的极大信息集,以处理真正大规模的数据。这是否必须使用多级数组来完成?或者你能否创建一个具有Long.MaxValue最大长度的数组?如果可以,如何实现?
CLR目前对于任何单个对象都有2GB的限制 - 因此,即使对于byte
类型的元素,您也必须将其构建为多个数组。虽然这应该是可行的。大多数正常的集合接口会失败,因为它们使用int
作为索引、计数等。
我认为CLR本身并没有受到整体进程限制,这会阻止此操作 - 尽管您几乎肯定希望在64位CLR和操作系统上运行。
您的要求是什么?很难相信,对于任何现实世界的问题,无论是否合法,一个比这更多元素的数组都将是正确的解决方案。您可能在考虑数据库,无论是持久化还是内存中都可以。这是组织非常大的数据集的标准方法。
如果索引器是long
(int64),而不是int32
,您只能使用基于索引的结构。
即使是List
也无法使用,因为索引器是int32
。
很少的计算机有足够的内存来在内存中保存这样的结构。
private readonly int[] _arrInts = new int[IntMax];
抛出了 System.OutOfMemoryException
异常。其中 private const int IntMax = int.MaxValue;
。有任何想法是为什么? - phougatvArrayList 可以包含超过 Int.MaxValue 的元素。
int.MaxValue
然后再添加更多的项。我相当确定 ArrayList 仍然会失败,但这不仅仅是因为你不能将 最终 容量指定给构造函数作为 初始 容量。 Translated: @Richard: 你的逻辑并不完全正确,因为容量会自动增加。你可以提供 int.MaxValue
,然后再添加更多的项。我很确定 ArrayList 仍然会失败,但问题不仅在于你不能将 最终 容量指定为构造函数的 初始 容量。 - Jon Skeet