我之前得到了 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
为List<ExportParameter>
,但失败的情况除外null
。
答案 0 :(得分:1)
除了获得OOMException的明显原因之外,如果你仍然有可用的内存,你也可以得到它,只是没有足够大的块用于请求。如果你在启动时可靠且相对接近它,你可能会意外地请求比你想要的更多的内存(即请求一个非常大的数组)。您可以发布一些代码或者至少描述一下您的分配模式吗?
答案 1 :(得分:1)
您可能遇到了Constrained Execution Regions旨在阻止的问题 - 也就是说,catch子句依赖的某些代码的JITting会导致内存不足。
(回应svish的评论,这是用Google搜索短语时的第一个链接:http://msdn.microsoft.com/en-us/library/ms228973.aspx)