1

私はOutOfMemoryException以前に取得しましたが、それが何のためにあるのかわかりませんでした。まったく意味がありませんでした。私のコードを掘り下げて、どこかが null をチェックするのを忘れていたことを突然思い出しました。私の意見では、それは原因ではありませんが、OutOfMemoryExceptionもちろん修正しました。そして、私がやったとき、例外はもう現れませんでした!

そこで、もう一度チェックを外して、さらに例外を調べました。そして、タイプの InnerExceptionNullReferenceExceptionとスタック トレースがあったことがわかりまし

しかし、なぜ私は得たのOutOfMemoryExceptionですか?こんなことは今までになかった...私には意味がありません...


もう少しコンテキストを提供したいのですが、プロジェクト全体をアップロードする必要がなければ、実際には多くを語ることはできません。しかし、それが起こった特定の場所は次のようになります。

            {
                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です。

4

2 に答える 2

1

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

(svishのコメントに応えて、これはフレーズをグーグルで検索するときの最初のリンクです:http: //msdn.microsoft.com/en-us/library/ms228973.aspx

于 2009-06-10T12:11:35.883 に答える
1

OOMException を取得する明白な理由は別として、要求されているものに対して十分な大きさのチャンクがないだけで、まだ使用可能なメモリがある場合にもそれを取得できます。信頼性が高く、比較的起動に近い場合は、意図したよりも多くのメモリを誤って要求している可能性があります (つまり、非常に大きな配列を要求しています)。コードを少し投稿するか、少なくとも割り当てパターンを説明していただけますか?

于 2009-06-10T12:07:08.997 に答える