1

OutOfMemoryException早点拿到了,不知道是干什么用的。这根本没有意义。在我的代码中四处寻找,突然想起某处忘记检查 null,在这种特殊情况下,它是(并且应该是)正是这样。在我看来,这不应该导致OutOfMemoryException,但我当然已经修复了它。当我这样做时,异常不再出现!

所以我再次删除了检查并研究了我得到的更多异常。事实证明它有一个InnerException 类型NullReferenceException和一个堆栈跟踪,这当然更有意义。

但为什么我得到一个OutOfMemoryException?这在我以前从未发生过……对我来说毫无意义……


很想提供更多背景信息,但如果不上传整个项目,我真的不能说太多,我不能(而且你也不想通读:p)。但它发生的具体地方是这样的:

            {
                foreach (var exportParameter in exportParameters)
                {
                    // Copy to local
                    var ep = exportParameter;

                    // Load stored values from db
                    ...
                }

                int i = 1;
                exportParameters
                    .OrderBy(ø => ø.Sequence)
                    .ForEach(ø => { if (!ø.Locked) ø.Sequence = i++; });
            }

解决方法是if(exportParameters != null)在代码块之前放置一个。exportParameters是 a List<ExportParameter>,但失败的情况除外null

4

2 回答 2

1

除了获得 OOMException 的明显原因之外,如果您仍有可用内存,您也可以得到它,只是没有足够大的块来满足所请求的内容。如果你得到它可靠且相对接近启动,你可能会意外地请求比你想要的更多的内存(即请求一个非常大的数组)。您可以发布一些代码或至少描述您的分配模式吗?

于 2009-06-10T12:07:08.997 回答
1

您可能会遇到约束执行区域旨在防止的问题 - 即,您的 catch 子句所依赖的某些代码的 JITting 导致内存不足的情况。

(针对 svish 的评论,这是谷歌搜索该短语时的第一个链接:http: //msdn.microsoft.com/en-us/library/ms228973.aspx

于 2009-06-10T12:11:35.883 回答