0

システムのメモリが不足しそうな時期を検出し、Application.Restart(); を使用してシステムを再起動する戦略を進めたいと考えています。

WebBorwser コントロールは、フォームにアタッチされた Web ブラウザー コントロールを破棄した後でもメモリ使用量が減少せず、これは IE の問題であり、私たちは彼らに翻弄されていると言っているので、私はこのルートをたどっています。(IEを開いて同じWebサイトを実行すると、メモリは増加しますが、タブを閉じると適切に減少します...)

watin には互換性がないため、Webkit に移行するつもりはありません。また、GeckoFX は JavaScript または jquery のサポートをサポートしていないため、GeckoFX を使用するつもりはありません。また、埋め込みブラウザー コントロールが一部であるため、外部ブラウザー インスタンスを使用するつもりもありません。私のインターフェースデザインの。

だから今私がしたいのは、使用可能なメモリを総メモリに対して動的にチェックし、GC が到達できないリソースを適切に破棄するために状況が重要になり、プログラムで破棄する方法を理解できない場合に再起動を実行するメソッドを作成することです。

これを実行して、中断したところから自動化を再開し、このデーモンをオンとオフを繰り返すことができると信じています。

メモリチェックのコーディング方法を理解するのを手伝ってくれる人はいますか? それは十分に簡単なはずです。このスレッドを見つけましたが、エラーが発生せずに実装するのに問題があります...別のアプローチの方が良いでしょうか? コンピューターに搭載されている RAM の総量を取得するにはどうすればよいですか?

みんなありがとう!これが役に立てば幸いです。

4

2 に答える 2

1

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

于 2012-04-05T22:18:52.053 に答える
0

Asp.Net は、使用可能なメモリが不足していることに気付くと、httpcache からデータを削除します。Reflector を介してフレームワークのその部分にアクセスし、そこでどのように機能するかを学ぶことができます...

于 2012-04-05T22:09:55.283 に答える