[解決済み] イベントハンドラのメモリリークを回避する理由と方法とは?
質問
StackOverflowのいくつかの質問と回答を読んで、イベントハンドラを追加する際に
+=
C#(あるいは他の.net言語)において、一般的なメモリリークを引き起こす可能性があります...。
私は過去に何度もこのようなイベントハンドラを使用してきましたが、自分のアプリケーションでメモリリークを引き起こす可能性がある、または引き起こしたことがあるとは思いもよりませんでした。
これはどのような仕組みなのでしょうか(つまり、なぜ実際にメモリリークが発生するのでしょうか)?
この問題はどうすれば解決できますか?この問題を解決するには
-=
を同じイベントハンドラに追加するだけでよいのでしょうか?
このような状況を処理するための共通のデザインパターンやベストプラクティスはありますか?
例:多くの異なるスレッドを持ち、多くの異なるイベントハンドラを使ってUI上の複数のイベントを発生させるアプリケーションをどのように扱えばいいのでしょうか?
すでに構築された大規模なアプリケーションで、これを効率的に監視するための良い方法、簡単な方法はありますか?
解決方法は?
原因は簡単に説明すると、イベントハンドラをサブスクライブしている間に パブリッシャー への参照を保持します。 サブスクライバ イベントハンドラのデリゲート(デリゲートがインスタンスメソッドであることを仮定)を通じて
もしパブリッシャーがサブスクライバーよりも長生きするならば、サブスクライバーへの参照が他にないときでも、サブスクライバーを存続させるでしょう。
もし、同等のハンドラを持つイベントの登録を解除した場合、そのハンドラを削除することになり、リークの可能性があります。しかし、私の経験では、これが問題になることはほとんどありません。なぜなら、通常、パブリッシャーとサブスクライバーの寿命は、いずれにしてもほぼ等しいと思うからです。
それは は しかし、私の経験では、それはむしろ誇張されすぎています。もちろん、あなたのマイレージは異なるかもしれません...ただ、あなたは注意する必要があります。
関連
-
[解決済み】WebForms UnobtrusiveValidationModeは、jqueryのScriptResourceMappingを必要とする
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] jQuery チェックボックスの変更とクリックイベント
-
[解決済み] 匿名)内部クラスを使用することがリークセーフとなるのは、具体的にどのような場合ですか?
-
[解決済み] ChromeでJavaScriptのメモリリークを発見する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】SmtpException: トランスポート接続からデータを読み取れません:net_io_connectionclosed
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】トランスポート接続からデータを読み取れない:既存の接続は、リモートホストによって強制的に閉じられました。
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】MetadataException: 指定されたメタデータ・リソースをロードできない
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】パラメータ付きRedirectToAction
-
[解決済み】別のスレッドがこのオブジェクトを所有しているため、呼び出し側のスレッドはこのオブジェクトにアクセスできない