私は素晴らしいwinforms 2.0アプリケーションを実行しましたが、うまくいっていて、顧客はまだ満足していますが、1つの問題を解決できません。問題は、アプリケーションを数時間使用した後、gdiユーザーのハンドル番号が上昇していて、処理がより多くのオブジェクトとアプリケーションクラッシュを割り当てることができないということです...winformsでgdi/userハンドラのリークが検出されました
私は何も気にせず、いくつかのフォーム、いくつかのモーダルフォーム、いくつかのdatagridviews、たくさんのテーブルレイアウトアウトプットがあります。ラベルやテキストボックスをたくさん追加しています。
私の質問は以下のとおりです。
- は、任意の「推奨プラクティスは、」ある システムハンドル を検出する方法を実行時にフォーム上のコントロール 通常のシステム(DGV/TLP)
- を追加/削除についてリーク - 好ましくは、視覚 スタジオと無料のプラグイン (?プロファイラ)のようなものを使用して
アドバイスいただきありがとうございます。 ソースコードのリークをトレース/検出するツール/ VSプラグインをお勧めしますか? – tomo
@tomo、もう一度いいえ、私はそのようなツールを知りません。私はあなたが直面している問題に似た問題を経験していたので、一度はかなり見ていました。それらを解決することは私を上記のヒントに導いたものです。 –
MDIアプリケーションの一部であるフォームにも、手動でDispose()を呼び出す必要があります。閉じるときにフォームが破棄されない場合の条件は、(1)MDIアプリケーションの一部であり、フォームは表示されません。 (2)ShowDialogを使用してフォームを表示したこと。このような場合、ガベージコレクションのためにフォームのすべてのコントロールをマークするには、Disposeを手動で呼び出す必要があります。 –