C#:为什么我在NullReferenceException上得到一个OutOfMemoryException?

时间:2009-06-10 12:00:44

标签: c# out-of-memory nullreferenceexception

我之前得到了 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)exportParametersList<ExportParameter>,但失败的情况除外null

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可能遇到了Constrained Execution Regions旨在阻止的问题 - 也就是说,catch子句依赖的某些代码的JITting会导致内存不足。

(回应svish的评论,这是用Google搜索短语时的第一个链接:http://msdn.microsoft.com/en-us/library/ms228973.aspx