gpt4 book ai didi

c# - OutOfMemoryException 仅在使用 VS2010 编译时在 Release 模式下出现?

转载 作者:行者123 更新时间:2023-11-30 13:50:33 25 4
gpt4 key购买 nike

我的程序仅在 Release 模式下生成 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,但在 another question where I asked what happens when the RAM is over 中,他们回答我说 CLR 创建了一个交换内存,尽管它只能寻址明确定义的内存量。

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

所以:

  • 在 Release 模式下发生了什么而在 Debug 模式下没有发生,导致程序在那里抛出异常?
  • 考虑到我确实需要存储那么多内存,因为它是由一些科学计算生成的数据,您对处理这个问题有何建议? (我正在考虑在计算过程中处理生成的数据,尽管在计算过程中会花费更多的时间,而不是生成大量数据然后处理它们...)

最佳答案

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

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

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

关于c# - OutOfMemoryException 仅在使用 VS2010 编译时在 Release 模式下出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6143253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com