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

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

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

基本上,考虑到Double消耗8个字节,只有这部分代码会生成〜11.9 GB。 我没有那么多的RAM,但是在另一个问题中,当我询问RAM结束时会发生什么,他们回答说CLR会创建一个交换内存,尽管它只能处理明确定义的内存量。

当我在DEBUG模式下编译我的程序时,它不抛出OutOfMemoryException ,而是分配大量内存并保持程序运行......我没有足够的耐心来检查程序是否能够顺利运行慢慢地,直到最后,因为它耗时太长。

所以:

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

  • 假设您在Visual Studio 2010中创建了项目,则其平台目标将默认为x86,也就是32位程序。 我假设你已经将其更改为x64,或者你永远不能分配超过2GB的地址空间。

    我的猜测是你刚刚进入项目属性>构建选项卡,并更改了“平台目标”。 问题是,如果这就是你所做的一切,那只会影响你的Debug构建配置,因为屏幕顶部的“配置”过滤器默认为“活动(调试)”。

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

    链接地址: http://www.djcxy.com/p/27961.html

    上一篇: OutOfMemoryException only in Release mode when compiled with VS2010?

    下一篇: Debug Mode vs. Release Mode