使用VS2010编译时,仅在发布模式下OutOfMemoryException?

时间:2011-05-26 18:20:50

标签: c# out-of-memory

我的程序仅在发布模式下生成OutOfMemoryExcetion,使用VS2010 C#编译器进行编译。发生崩溃时它正在执行的操作是实例化1600个锯齿状数组,并且在下面循环的简化版本的第207个时它崩溃了:

Double[][] arr = new Double[1600][];
int i = 0;
while (i < 1600)
{
    arr[i] = new Double[1000000];
    i++;
}

基本上,只要这部分代码产生~11.9 GB,考虑到Double占用8个字节。我没有那么多RAM,但在another question where I asked what happens when the RAM is over中,他们回答我CLR创建了一个交换内存,尽管它只能解决定义明确的内存量。

当我在DEBUG模式下编译我的程序时,它不会抛出OutOfMemoryException,相反,它会分配大量内存并保持程序运行...我没有足够的耐心来检查是否该程序运行平稳,但速度很慢,直到结束,因为它花了太长时间。

所以:

  • 在发布模式下没有在调试模式下发生了什么,导致程序在那里抛出异常?
  • 考虑到我真的需要存储那么多的内存,因为它是一些科学计算产生的数据,你有什么建议来处理这个问题? (我正在考虑在计算过程中处理生成的数据,虽然在计算过程中需要花费更多的时间,而不是生成大量数据然后处理它......)

1 个答案:

答案 0 :(得分:9)

假设您在Visual Studio 2010中创建了项目,其平台目标将默认为x86,即32位程序。我假设您已将此更改为x64,或者您永远无法分配超过2GB的地址空间。

我猜你只是去了项目属性&gt;构建选项卡,并更改“平台目标”。问题是,如果这就是你所做的,那只会影响你的Debug构建配置,因为屏幕顶部的“Configuration”过滤器默认为“Active(Debug)”。

将该过滤器框更改为“Release”以查看发布版本设置。您还需要在此处将“平台目标”更改为“x64”。