大型多维数组(Jagged Array)C#的解决方法?

我正在尝试初始化三维数组以加载体素世界.

地图的总大小应为(2048/1024/2048).我试图初始化一个“int”的锯齿状数组,但我抛出了一个内存异常.尺寸限制是多少?
我桌子的大小:2048 * 1024 * 2048 = 4’191’893’824

有人知道解决这个问题吗?

// System.OutOfMemoryException here !
int[][][] matrice = CreateJaggedArray<int[][][]>(2048,1024,2048);
// if i try normal Initialization I also throws the exception
int[,] matrice = new int[2048,2048];

    static T CreateJaggedArray<T>(params int[] lengths)
    {
        return (T)InitializeJaggedArray(typeof(T).GetElementType(),lengths);
    }

    static object InitializeJaggedArray(Type type,int index,int[] lengths)
    {
        Array array = Array.CreateInstance(type,lengths[index]);
        Type elementType = type.GetElementType();

        if (elementType != null)
        {
            for (int i = 0; i < lengths[index]; i++)
            {
                array.SetValue(
                    InitializeJaggedArray(elementType,index + 1,lengths),i);
            }
        }

        return array;
    }

解决方法

C#中单个对象的最大大小为2GB.由于您正在创建一个多维数组而不是锯齿状数组(尽管您的方法名称),因此它是一个单个对象,需要包含所有这些项,而不是几个.如果您实际使用了锯齿状阵列,那么您将不会拥有包含所有这些数据的单个项目(即使总内存占用量更大,而不是更小,它只是分散更多).

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...