2017-08-02 25 views
1

让我们说我正在运行一个物理模拟,它使用整数作为模型的顶点。在这个模拟中,我将整数数组加载到列表中,因为顶点的数量可能会有所不同;像这样:列表中的元素是否受到2 GB的对象大小限制

List<int[]> x = new List<int[]>(); 
x.Add(new <int[1]>()); 

我知道这是一个有点过分,考虑使用2GB的身价整数,但该模型可以从单个对象的整个开放的领域范围内的任何地方。所以,考虑到这个过程足够重复占用2GB,每个元素/数组是否拥有自己的2GB,因为它是自己的对象,还是整个列表仍算作相同的对象。

回答

0

列表是一个对象,所述背衬阵列内部列表(T[],所以:int[][])是一个对象,并且每个int[]阵列(分别)的对象。只要没有单个数组太大,你就可以。 List<some array>中的数组在任何时候都不会被视为连续的,因此它们的组合长度是否超过2 GiB限制并不重要。

请注意,可以使在配置(<gcAllowVeryLargeObjects>)非常大对象支持挤出一个稍大阵列极限 - 对大多数阵列(未字节/单字节元素)它改变了最大元件计数至2,146,435,071 - 在您的情况下为〜8 GiB(int[])。这并不一定意味着它是好主意这样做:)

+0

我想用列表替换数组以实现多维列表将产生相同的结果。 – Texadecimal

+0

@Texadecimal确实;但请记住,列表*拥有*支持字段的数组* *无论如何*锯齿阵列与锯齿形列表之间的主要区别是:哪些部分允许附加元素vs是固定长度 –

+0

并认真AllowVeryLargeObjects!?非常专业的微软! – Texadecimal

相关问题