2012-04-05 12 views
0

私は、システムのメモリが不足していることを検出し、Application.Restart()を使用してシステムを再起動する方法を検討しています。メモリ不足例外の防止または予測

フォームに添付されたWebブラウザコントロールを破棄しても、メモリ使用量が減少せず、読んだところではIEの問題であり、私たちはその慈悲に満ちているため、WebBorwserコントロールが原因です。 (IEを開いても同じWebサイトを実行しても、メモリは増えますが、タブを閉じると適切に減少します...)

私はWebkitに移行したくないと思っています。 GeckoFXはJavaScriptやjqueryのサポートをサポートしていないので、組み込みのブラウザコントロールがインターフェイスデザインの一部であるため、外部のブラウザインスタンスを使用することはできません。

これで、使用可能なメモリを総メモリに対して動的にチェックし、GCが到達できないリソースを適切に処分するために状況が悪化した場合に再起動を実行する方法を作成します。 。

私はこれを行うことができ、私がやめたところからオートメーションを再開し、このデーモンを繰り返し実行すると信じています。

誰でもメモリチェックをコード化する方法を理解できますか?それは十分に簡単でなければなりません。私はこのスレッドを見つけましたが、エラーに陥ることなく実装するのに苦労しています...おそらく別のアプローチが良いでしょうか? How do you get total amount of RAM the computer has?

ありがとうございました!これが役立つことを願っています

+3

OOMは、物理RAMではなくアドレス空間です。 – CodesInChaos

+0

「選択が壊れています」というメッセージが表示されます –

+0

実際にプロファイラを使用しているのか、アームチェアメモリ分析を行っていますか? –

答えて

0

Asp.Netは、使用可能なメモリが不足していることに気づいたときにhttpcacheから情報を削除します。リフレクタを介してフレームワークのその部分にアクセスして、そこに...

+2

@AdamMaras:あなたはその点を見逃しています。 Andreasのポイントは、ASPは何とかメモリが不足していると判断し、ASPをリバースエンジニアリングしてその動作を把握することでした。それは私が個人的にどのように進行することをお勧めするかではありません。 –

+0

キャッシングを防ぐためにwebbrowserコントロールインスタンスをプログラム的に設定できませんでしたか? (私は、ブラウザセッション中のhttpcacheとimage/pageのキャッシュが同じものであると仮定しています)...このIEの問題を読んでいる人の多くは、メモリのクリープがキャッシュにあると想定しています。しかし、私のように、Webブラウザーのメモリリークの問題に対処しようとしている人たちが本当に知っている人たちがもっといます。メモリプロファイラーがなければ、あなたは自分の問題がWebブラウザーコントロールに関連していると信じられません確かに... – atwellpub

+0

@EricLippert ASPがこれをどのようにしているのかわかりませんが、あなたがCLRをホストしている場合にのみこれを正常に行うことができると思われます。 –

1

これはあまり意味がありません。 OOMは、CLRメモリマネージャが目的のメモリチャッキングを割り当てられなかったために発生します。これは、いくつかの理由による可能性があります。すべての割り当てが行われる前に利用可能なRAM(まったく無関係です)または使用可能なGCメモリでさえ、ではなく、はOOMが存在しないことを保証します。例えば。 LOHフラグメンテーションがある場合、使用可能なバイト数の合計が割り当ての必要性を超える可能性がありますが、CLRが空きリストから1つの連続したメモリチャンクを割り当てることができない場合でも、リクエストは失敗します。