我有程序,我必须使用极端大数组。 我需要使用二维数组。
我使用了经典bool[,]
,但是当我在索引太大时尝试声明它时它抛出了System.OutOfMemoryException
。 (使用bool[,] foo = new bool[width + bar, height]
)。数字width
和bar
都非常大,所以我想,它只是超出了索引。
如何将索引类型更改为Int64(long)?我知道我可以使用Dictionary<ulong, bool>
,但它会迫使我重写我的应用程序中的几乎所有代码,我发现使用Dictionary工作更舒服,特别是当我已经拥有我需要的LINQ方法时,我不会不知道,它是否适用于二维字典。
谢谢,彼得
编辑1:
这是代码(注意:我刚刚使用sizeX = 2000000000
对其进行了测试,它抛出异常):
bool[,] pole = new bool[sizeX, maxY];
问题是,我有许多具有X,Y长度和x长度的对象(Y始终为0)。我有一个数组,在每个位置上,有或者不是对象图块。
所以我得到了coord X,width&amp;高度和位置瓦片成阵列。
关键是,X可以否定,所以当我需要定位例如10个对象时,我得到最低的X(并保存例如largestNegativeX = -999
)并且在定位对象之前在数组中,我添加到每个对象的X object.X += -largestNegativeX
。然后我找出数组宽度(例如2000000000
)并尝试声明数组。它就是抛出异常的地方。