5

我试图创建以下数组

int numOfArrays = 50000;
int lengthOfArrays = 13500;

long[,] unsortedNumbers = new long[numOfArrays,lengthOfArrays];

但我不断得到内存异常。我的目标是 x64,我相信我设置了大地址感知标志,见图片,但我仍然收到错误。奇怪的是,我在同一个程序中有一个列表,它消耗 16gig 的 ram,没有任何问题。

系统:

64g 内存

高清免费 100gig。

4

1 回答 1

12

对于 32 位和 64 位进程,.NET 运行时中的对象大小有 2Gig 限制。

但在 NET 4.5 中,您可以增加在 64 位进程中运行时运行的 NET 代码的限制gcAllowVeryLargeObjects

如果出现以下情况,您的 NET 代码将以 64 位运行:

  • 您的平台目标显示“x64”
  • 您正在使用 NET 4 并且您的平台目标显示“AnyCPU”并且您在 64 位操作系统平台上运行
  • 您正在使用 NET 4.5 并且您的平台目标显示“AnyCPU”并且您已关闭/取消选中“首选 32 位”并且您在 64 位操作系统平台上运行

您正在分配:

50000 * 13500 * 8 = 5400000000 字节 = 5.029 GB

如果您没有使用 NET 4.5 的奢侈,那么根据您的使用场景,您可以使用BigArray

于 2013-07-23T11:33:42.307 回答