1

私の c# アプリは時々スローOOMしても問題ありません (ユーザーは SQLlimitコマンドを使用せずにデータを取得できます)、必要なのはそれを適切に処理することだけです。MessageBox使用するためのアドバイスが含まれてlimitいれば十分です。

問題は、OOM毎回異なる行で発生することです (同じデータが取得される同じ行ですが、新しいデータ - 新しい例外ポイント): GDI+ が描画を行うための空きメモリがない場合、SQL コネクタが失敗する場合、ラッパークラス。さまざまな行、さまざまなクラス、さまざまなイベント ハンドラー、さらにはさまざまな匿名メソッドです。思ったほど悪くはありませんが、クラス階層はかなり正当なものですが、1 つ (または 2 つ) のtry/catchブロックのみを使用するほど単純にすることはできません (アプリはマルチスレッドです)。

AppDomain.CurrentDomain.UnhandledException/Application.ThreadExceptionオプションはありません (処理するには遅すぎます)。

OOMアプリによってスローされた最初のものOOMを適切に処理する方法はありますOOMSortableBindingList? GCに何らかの作業を強制しようとしているときに、メモリが他の場所に割り当てられないように処理するには?

4

1 に答える 1

1

OOM は、ガベージ コレクターが機能していないためであると想定しているようです。多くの場合、アプリケーションがメモリを使いすぎている (またはメモリの断片化が多すぎる) ことが原因です。

アプリケーションのメモリ使用量がユーザー入力によって決定され、そのユーザー入力を制限して OOM を防ぐことができない場合は、失敗したコードを別の AppDomain 内で実行することをお勧めします。その AppDomain が失敗した場合でも、元の AppDomain は引き続き良好な状態で障害を処理し、ユーザーに「二度とそれを行わないでください」と通知します。

于 2013-10-13T03:02:10.790 に答える