无法分配大型锯齿状阵列

时间:2018-03-16 07:20:56

标签: c# arrays out-of-memory 64-bit

我正在尝试执行以下函数来创建和初始化一个大的锯齿状数组,其中TInt16NumOfRows10000NumOfColumns1127211

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>

设置。我错过了什么吗?分配这么多内存是不可能的吗?请注意,该数组是锯齿状的,这意味着只有数组的行需要是连续的。您是否有任何建议可以配置更多内存?访问内存有哪些其他选择?

1 个答案:

答案 0 :(得分:0)

如果您正在使用Visual Studio 2017,请打开项目属性并确保Build - &gt;平台目标是任何CPU,您已取消选中&#34;首选32位&#34;。

我能够在64位机器上重现您的阵列(大约22.7 GB),只有8GB的物理内存。