创建大数组时内存不足[,]

Luc*_*per 0 c#

当我想要创建大数组时,我的内存不足.

 var size = 20000;
 var matrix = new decimal?[size, size];
Run Code Online (Sandbox Code Playgroud)

我已设置64位项目并取消选中"首选32位".

屏蔽1

我在App.config中添加了

<runtime>
    <gcAllowVeryLargeObjects enabled="true"/>
</runtime>
Run Code Online (Sandbox Code Playgroud)

画面2

我有16 GB RAM.我忘记了什么?

dav*_*bak 7

一个对象中的10Gb(24个字节(可空十进制的大小)*20000*20000)超过.NET中单个对象的默认大小(即CLR) - 请参阅此MSDN文档"gcAllowVeryLargeObjects Element",了解如何超过更改配置变量.那篇文章还列出了你可能感兴趣的数组的其他限制,例如,你只能在一个数组中有2 ^ 32个元素 - 如果400M元素不够,你正在考虑将它带到下一个级别.

更好的解决方案是"锯齿状"数组,[][]在C#中标注- 每行将是一个单独的对象(一维数组[]),因此您不会遇到任何这些限制.

您可能想要考虑其他选项.也许,你的阵列可能稀疏?也许它是一个有可用属性的矩阵,例如上三角?也许你可以重新考虑你在做什么,所以你不需要任何东西一个万兆阵列-而不是更喜欢另一种数据结构,甚至更好,如果数据的量确实需要处理,一个外部存储磁盘上的数据算法并以可预测(例如,顺序或多顺序)的方式访问它?

最后,我怀疑为什么你需要一个可以为的小数组的巨大数组:听起来你真的有一个稀疏数组,应该看看稀疏数组的解决方案(很多关于那些的StackOverflow和Google).