4

私はすでにこの質問を見て、そこで行われた提案をすでにチェックアウトしました。私のプログラムは、多くの UI コントロール (多くの UI コントロール) を作成および破棄します。コントロールが「破棄」された後にハングアップすると、この問題が発生します。(興味深い事実:コンテナーを破棄する前にToolStripコントロールのVisibleプロパティを false に設定しないと、テーマ変更イベントを受け取るためにまだ Windows に登録されているため、破棄されません。表示されていない場合にのみ、自分自身を登録解除します。そして、コンテナが破棄されているときにこれが起こっていることを知る方法がないようです.)

問題は、私のアプリケーションが実際にウィンドウ ハンドルを使い果たしている可能性があるということです。プログラムには、ネストされたタブ コントロールを持つ単一のフォームがあります。各親タブには 12 個または 13 個の子タブがあり、子タブには 30 個または 40 個のコントロールを含めることができます。ユーザーがいつでも 15 個の親タブを開いている可能性は十分にあり、それはアプリケーション内の 5000 以上のライブ コントロールの領域に入りつつあります。また、私のコントロールの多くが複数のウィンドウ ハンドルを使用していることもわかっています。

(そして、「まあ、UI の設計が間違っているようだ」と言う前に、それを誤解させてください。そもそもアプリケーションが存在する理由は、ユーザーが必要とするデータの膨大なスペースを持っているからです。タブ内のタブは、実際には非常にうまく機能します。)

私の理解では、アプリケーションごとに 10,000 ウィンドウ ハンドルというハード リミットがあります。それが実際に真実である場合 (真実ではない多くのことを理解しています)、アプリでのそれらの使用を管理する必要があります。たとえば、ウィンドウ ハンドルが少なくなり始めたら、使用頻度が最も低いタブの内容を破棄できます。

しかし、ウィンドウ ハンドルが不足し始めたことをどのように判断すればよいでしょうか。そして、これは本当に問題への正しいアプローチですか?

(これは、この UI を WPF で再構築したい多くの理由の 1 つにすぎません。)

4

3 に答える 3