大型多维数组(Jagged Array)C#的解决方法?
发布时间:2020-12-15 07:54:28 所属栏目:百科 来源:网络整理
导读:我正在尝试初始化三维数组以加载体素世界. 地图的总大小应为(2048/1024/2048).我试图初始化一个“int”的锯齿状数组,但我抛出了一个内存异常.尺寸限制是多少? 我桌子的大小:2048 * 1024 * 2048 = 4’191’893’824 有人知道解决这个问题吗? // System.Out
我正在尝试初始化三维数组以加载体素世界.
地图的总大小应为(2048/1024/2048).我试图初始化一个“int”的锯齿状数组,但我抛出了一个内存异常.尺寸限制是多少? 有人知道解决这个问题吗? // 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.由于您正在创建一个多维数组而不是锯齿状数组(尽管您的方法的名称),因此它是一个单个对象,需要包含所有这些项,而不是几个.如果您实际使用了锯齿状阵列,那么您将不会拥有包含所有这些数据的单个项目(即使总内存占用量更大,而不是更小,它只是分散更多).
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |