2009-06-10 24 views
1

私はOutOfMemoryExceptionを先に持っていて、何のためにそれを理解できませんでした。それはまったく意味がありませんでした。私のコードの周りを掘って、突然どこかでnullをチェックすることを忘れていたことを思い出しました。この特定のケースでは、それはまさにそのことでした。それは私の意見でOutOfMemoryExceptionを引き起こすべきではありませんが、私はもちろんこれを修正しました。そして、私がしたとき、例外はもう現れなかった!C#:NullReferenceExceptionでOutOfMemoryExceptionが発生するのはなぜですか?

私はもう一度チェックを外して例外を学びました。それはNullReferenceExceptionのInnerExceptionともちろん、スタックトレースを持っていることがわかりました。もちろん、をたくさん作ってより意味があります。

しかし、なぜ私はOutOfMemoryExceptionを取得しましたか?これは私には意味がありません前に... ...


は、いくつかのより多くのコンテキストを与えるのが大好きだが、実際にプロジェクト全体をアップロードすることなく、多くを語ることはできない、これI私に起こったことはありませんあなたはとにかく読むことを望まないでしょう: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は、nullであった場合を除いて、List<ExportParameter>です。

+1

いくつかの追加のコンテキストなしに伝えるための方法はありません。 –

答えて

1

制約付き実行領域が、つまりcatch節が依存するコードのJITtingがメモリ不足状態を引き起こしていることを防ぐように設計されているという問題に直面している可能性があります。

(フレーズグーグルときsvishさんのコメントを受けて、これは最初のリンクです:http://msdn.microsoft.com/en-us/library/ms228973.aspx)を

+0

制約付き実行領域? – Svish

1

OOMExceptionを取得する明白な理由の他に、依然としてメモリが利用可能な場合でも取得できます。要求されているものに対して十分な大きさのチャンクではありません。信頼性が高く、スタートアップに比較的近づいている場合は、間違って意図したより多くのメモリを要求している可能性があります(つまり、非常に大きな配列を要求しています)。コードを少し投稿するか、少なくとも割り当てパターンを記述できますか?

関連する問題