2009-06-10 37 views
1

我得到了一个OutOfMemoryException更早,无法弄清楚它是什么。它根本没有意义。在我的代码中挖掘出来,突然想起某处忘记检查null,在这个特定情况下,它确实是(而且应该是)。在我看来,这不应该导致OutOfMemoryException,但我当然会修正它。当我这样做时,异常不再出现!C#:为什么我得到一个NullReferenceException的OutOfMemoryException?

所以我再次取消了检查,并研究了我得到更多的异常。原来它有一个InnerException类型NullReferenceException和堆栈跟踪当然使很多更有意义。

但为什么我得到OutOfMemoryException?这从未happend到我面前......没有意义的,我...


很乐意给一些背景,但真的不能说太多,而无需上传整个项目,我不能(你不想通过任何方式阅读: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的失败案例中。

+1

没办法说没有一些额外的上下文。 – 2009-06-10 12:06:13

回答

1

您可能会遇到约束执行区域被设计为阻止的问题 - 也就是说,catch子句依赖的某些代码的JITting会导致内存不足情况。

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

+0

受约束的执行区域? – Svish 2009-06-10 12:56:22

1

除了获得OOMException的显而易见的原因之外,如果您仍然有可用的内存,对于所请求的内容不够大,您也可以得到它。如果你在启动时可靠且相对靠近启动,你可能会意外地请求比你想要更多的内存(即请求一个非常大的阵列)。你可以发布一段代码或者至少描述一下你的分配模式吗?

相关问题