Win-Formアプリケーションを作成するとき、これはVisual StudioによってFormを処理するために生成されるコードです。WinFormsとイベントハンドラ
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
これで十分ですか、コントロールがガベージコレクタによって収集されるようにすべてのイベントを登録解除する必要がありますか?
if (disposing && (components != null))
{
myButton.OnClick-= MyFunction; //may be here!!
// ... all events used
components.Dispose();
}
これは、すべてのイベントの登録を解除する責任を負いませんか? –
@ハンス・パサント:私の経験上、フォームに影響を与える*イベントの量が多い場合や、あまりにも頻繁に使用されて「予約解除」しない場合、メモリリークが発生します。 – Tigran
はい、そういう意味です。これは、イベント・ソースがイベント・コンシューマーよりも長生きする場合にのみ必要です。フォームとその子コントロールで決して問題はなく、それらはすべて同時に死ぬ。 SystemEventsクラスのイベントは、手動で登録を解除する必要があるイベントの例です。 –