RoutedUICommand への CommandBinding を持つユーザー コントロールを作成すると、メモリ リークが発生するのではないかと心配しています。
シナリオ:
RoutedUICommand を c クラスの static として使用し、コマンドを格納します。ユーザー コントロールに CommandBindings を実装します。ユーザー コントロールをメイン フォームに追加します。メイン フォームからユーザー コントロールを削除し、それへの参照を null に設定します。
コマンド バインディングの canExecute は引き続き起動します。UserControl への参照がないため、リークしています。フォームが閉じられた後も長時間発火し続けます。(停止するのを見たことがありません)ガベージコレクションを強制すると、収集されます(canExecuteの起動が停止します)
これを説明するテストプロジェクトがあります。メソッドを起動するオブジェクトのハッシュ コードを出力する canExecute に Console.WriteLine があります。新しいユーザー コントロールを追加するためのボタンと、それを削除するためのボタンがあります。
これは気にしなくていいのでしょうか?強制された場合、ユーザーコントロールは収集されます。これは、次のコレクションで収集されるということですか? アプリのパフォーマンスの低下に気づき、メモリ リークなどを追跡しています。多くの UI 要素を含む複雑なフォームがあり、レイアウトから削除すると、プロセッサとメモリ領域を使い果たしています。(多くのコマンドを使用します) ビジュアル ツリーから何かを削除すると、ルーティング イベントを受信できなくなると思いました。私は何が欠けていますか?