WinFormsでのメモリリーククラッシュからの回復
-
12-12-2019 - |
質問
Forms.ImagesやForms.WebBrowserのような、私がコントロールが制限されているいくつかのライブラリに頼っているWinFormsアプリを持っています。散発的な突然のメモリの漏れは私のアプリケーションがクラッシュします。これらはビッグアップするオーバータイムメモリリークではありません。彼らはランダムで、しばしば異なるCOMの例外であり、予測することは不可能です - 時には1日後に起こる、時には1日後に起こる。
私の現在の方法論は、少なくとも一時的に対処することは、最初のアプリケーションがgetProcessesByName()を使用して実行されていることを別のアプリケーションに確認することです。ただし、進行中のプロセスがクラッシュするが閉じないため、これは問題があります。私はちょうど私はちょうど私はちょうど私は良いメッセージを入手します(それがコンピュータでオフになっているという事実にもかかわらず)。最悪のプロセスがクラッシュし、メモリリークがビルドアップされると、2番目のプロセスチェックアプリケーションもクラッシュすることです。そして私が手動でShabang全体を再起動するまで何も機能しません。
1)プロセスBが作られたメモリ問題を踏まずにプロセスBが実行されずにプロセスBが実行されている場合は、プロセスBが実行されている場合は、プロセスBが実行されているかどうかを確認する効果的な方法を知っていますか?
2)上記が不可能な場合、または難しすぎる場合、誰もが、不履行のウェアエラーなしでプロセスが実行されていることを確認するために使用できる良いサードパーティ製ツールを知っています。そしてそれは最大限のRAMを耐えることができますか?
ありがとう!
解決
問題を回避する代わりに、最初に修正するようにしてください。
管理されていないリソースを使用している間に退漏メモリのリークである場合は、COMコンポーネント、キャッチ、次に廃棄、再初期化することができない場合は、それが可能な限り不可能な場合には、それらを原因とすることができない場合は
それ以外に、それはあなたのプロセスがクラッシュしなかったようですが、もう対応しないようです。プロセス。対応する。またはメモリ使用量を監視し、指定された制限を超えると、それを殺してくださいProcess.WorkingSet64
他のヒント
通常はPSKILLを使用してコマンドラインからプロセスを強制終了します。それをするために.NETサービスを書く必要はありません。
しかし、あなたのおそらく単純なプロセスチェックアプリが不合格上に失敗しているという事実は、問題の実際のシステムに問題があると信じるようになるでしょう。