我正在尝试执行以下函数来创建和初始化一个大的锯齿状数组,其中T
为Int16
,NumOfRows
为10000
和NumOfColumns
是1127211
。
public static T[][] Create<T>(int NumOfRows, int NumOfColumns, T Value)
{
var Result = new T[NumOfRows][];
for (int i = 0; i < NumOfRows; i++ )
{
Result[i] = new T[NumOfColumns];
for (int j = 0; j < NumOfColumns; j++)
{
Result[i][j] = Value;
}
}
return Result;
}
据我了解,分配的内存总量大约为20千兆字节。这些机器的物理RAM是16千兆字节,Windows交换文件的大小大约是13千兆字节。但是,我得到了一个
OutOfMemoryException
在分配期间。该项目构建为64位可执行文件,App.config
使用
<runtime>
<gcAllowVeryLargeObjects enabled="true" />
</runtime>
设置。我错过了什么吗?分配这么多内存是不可能的吗?请注意,该数组是锯齿状的,这意味着只有数组的行需要是连续的。您是否有任何建议可以配置更多内存?访问内存有哪些其他选择?
答案 0 :(得分:0)
如果您正在使用Visual Studio 2017,请打开项目属性并确保Build - &gt;平台目标是任何CPU,您已取消选中&#34;首选32位&#34;。
我能够在64位机器上重现您的阵列(大约22.7 GB),只有8GB的物理内存。