我的程序OutOfMemoryExcetion只在Release模式下生成,用VS2010 C#编译器编译.发生崩溃时它正在执行的操作是实例化1600个锯齿状阵列,并且在下面循环的简化版本的第207个时它崩溃了:
Double[][] arr = new Double[1600][];
int i = 0;
while (i < 1600)
{
arr[i] = new Double[1000000];
i++;
}
Run Code Online (Sandbox Code Playgroud)
基本上,只要这部分代码生成~11.9 GB,考虑到Double消耗8个字节.我没有那么多的RAM,但在另一个问题中我询问当RAM结束时会发生什么,他们回答我CLR创建了一个交换内存,尽管它只能解决明确定义的内存量.
当我在DEBUG模式下编译我的程序时,它没有抛出OutOfMemoryException,而是分配了大量的内存并保持程序运行...我没有足够的耐心来检查程序是否运行顺畅,但速度很慢直到最后,因为它花了太长时间.
所以:
假设您在Visual Studio 2010中创建了项目,其平台目标将默认为x86,即32位程序.我假设您已将此更改为x64,或者您永远无法分配超过2GB的地址空间.
我的猜测是你刚刚进入项目属性>构建选项卡,并更改了"平台目标".问题是,如果这就是你所做的,那只会影响你的Debug构建配置,因为屏幕顶部的"Configuration"过滤器默认为"Active(Debug)".
将该过滤器框更改为"Release"以查看发布版本设置.您还需要在此处将"平台目标"更改为"x64".