2009-06-10 68 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的顯而易見的原因之外,如果您仍然有可用的內存,對於所請求的內容不夠大,您也可以得到它。如果你在啓動時可靠且相對靠近啓動,你可能會意外地請求比你想要更多的內存(即請求一個非常大的陣列)。你可以發佈一段代碼或者至少描述一下你的分配模式嗎?

相關問題