如何解决仅当使用VS2010进行编译时,OutOfMemoryException仅在发布模式下吗?
| 我的程序仅在Release模式下生成ѭ0,并使用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的地址空间。
我的猜测是,您只是转到项目属性>“构建”选项卡,然后更改了“平台目标”。事实是,如果您已完成所有操作,那只会影响您的调试版本配置,因为屏幕顶部的“配置”过滤器默认为“活动(调试)”。
将该过滤器框更改为\“ Release \”,以查看发布版本设置。您还需要在此处将“平台目标”更改为“ x64”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。