我的程序只在发布模式下生成OutOfMemoryExcetion
,使用VS2010 C#编译器进行编译。发生死机时被实例化1600个锯齿状排列,并在第207的下方循环的简化版本,当它打破了,它正在执行操作:仅在发布模式下使用VS2010编译时,OutOfMemoryException?
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
,而是分配大量内存并保持程序运行......我没有足够的耐心来检查程序是否会尽管运行缓慢,但运行平稳直到最后,因为它耗时过长。
所以:
- 什么真的发生在调试模式没有,导致程序抛出一个异常有发行模式?
- 考虑到我真的需要存储这么多的内存,因为它是由一些科学计算生成的数据,你有什么建议来处理这个问题? (我正在考虑在计算过程中处理生成的数据,但在计算本身时需要多一点时间,而不是生成大量数据然后处理它)
你在64位吗? – khachik 2011-05-26 18:23:35
请注意,您可以在32位进程中处理的最大管理内存量为2GB(如果您尚未编译为x64目标)。 – 2011-05-26 18:24:51
另外,发布模式通常更快,所以它可能只是因为您没有足够长的时间来等待调试版本中出现OutOfMemory异常。 – 2011-05-26 18:25:57