개체를 null로 설정하면 개체 이벤트에 첨부 된 이벤트 핸들러가 정리되는지 궁금합니다.
을 포함한다.
Button button = new Button();
button.Click += new EventHandler(Button_Click);
button = null;
button = new Button();
button.Click += new EventHandler(Button_Click);
button = null;
기타...
이로 인해 메모리 누수가 발생합니까?
다른 언급이없는 경우button
어디서나 이벤트가 발생하면 메모리 누수를 피하기 위해 이벤트 핸들러를 제거 할 필요가 없습니다. 이벤트 핸들러는 일방적 인 참조이므로, 이벤트 핸들러는 이벤트가있는 오브젝트가 수명이 오래 걸릴 때만 제거하면됩니다.핸들러(예 : 핸들러 메서드가있는 객체)가 오래 가지 못하게해야합니다. 귀하의 예에서는 그렇지 않습니다.
요약 : 이벤트 원본 / 게시자가 오래 지속되고 구독자가 아닌 경우 명시 적으로 구독을 취소해야합니다. 이벤트 원본이 구독자의 수명을 초과하면 등록 된 모든 구독자는 구독을 취소하고 이벤트 게시자의 알림 목록에서 자신에 대한 참조를 제거하지 않는 한 이벤트 원본 (GC가 수집하지 않음)에 의해 "활성"상태로 유지됩니다.
또한 이것은C #에서 이벤트 처리기를 명시 적으로 제거해야합니까?좋은 제목과 대답이 있습니다. 그래서 투표를 닫습니다.
토론보기여기 "마지막 질문 : 이벤트 처리기를 제거해야합니까?"
결론 : 이벤트에 참석 한 대표자 클래스 자체 외부; 즉 당신은 외부 이벤트에 가입하고, 구독을 종료해야합니다. 완료되었습니다. 그렇게하지 않으면 당신의 목표는 오래 살았습니다. 필요한.