C#:NullReferenceExceptionでOutMemoryExceptionを取得するのはなぜですか?
-
13-09-2019 - |
質問
私は手に入れました OutOfMemoryException
以前は、それが何のためにあるのか理解できませんでした。まったく意味がありませんでした。私のコードを掘り下げて、どこかでヌルをチェックするのを忘れていたことを突然思い出しました。それは原因ではありません OutOfMemoryException
私の意見では、もちろん私はそれを修正しました。そして、私がやったとき、例外はもう現れませんでした!
それで、私は再び小切手を削除し、例外を研究しました。そして、それが持っていたことがわかりました タイプのinRexception 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
aです List<ExportParameter>
, 、失敗した場合を除き、 null
.
解決
制約付きの実行領域が防止するように設計されているという問題に直面している可能性があります。つまり、Catch条項に依存しているコードのジッティングは、メモリ状態を引き起こしていることです。
(Svishのコメントに応えて、これはフレーズをグーグルで検索する際の最初のリンクです。 http://msdn.microsoft.com/en-us/library/ms228973.aspx)
他のヒント
Oomexceptionを取得する明白な理由は別として、メモリがまだ利用可能である場合は、要求されているものに十分な大きさのチャンクではありません。スタートアップが確実に近くにそれを取得している場合、おそらくあなたが意図するよりも多くのメモリを誤って要求している(つまり、非常に大きな配列を要求する)。コードを少し投稿したり、少なくとも割り当てパターンを説明したりできますか?