C#:为什么我会在NullReferenceException上获得OutofMemoryException?
-
13-09-2019 - |
题
我有一个 OutOfMemoryException
较早,无法弄清楚它的用途。这根本没有意义。在我的代码中四处挖掘,突然想起某个地方忘记了检查null,在这种特殊情况下,它正是(并且应该)。那不应该导致 OutOfMemoryException
我认为,但我当然将其修复。当我这样做时,例外不再出现了!
因此,我再次删除了支票,研究了我得到了更多的例外。事实证明它有一个 类型的创新感 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
.
解决方案
您可能面临着限制执行区域旨在预防的问题 - 也就是说,您的捕获条款所依赖的某些代码的打击正在导致内存状况。
(为了回应Svish的评论,这是谷歌搜索短语时的第一个链接: http://msdn.microsoft.com/en-us/library/ms228973.aspx)
其他提示
除了明显的理由获得Omexception之外,如果您仍然有可用的内存,您还可以得到它,只是不足以满足所要求的内容。如果您可以可靠且相对近距离启动,那么您可能会意外地要求比打算更多的内存(即请求一个非常大的数组)。您可以发布一些代码还是至少描述您的分配模式?
不隶属于 StackOverflow