취소하지 않는 것이 나쁜가요?
몇 개의 이벤트가없는 경우 등록 된 애플리케이션이 있고 이벤트를 사용하는 것이 삭제는 애플리케이션이 닫힐 때까지 걱정할 필요가없는 경우 등록 취소에 대해 할 필요가 있습니까? 내가 볼 수있는 유일한 좋은 이유는 이벤트가 발생하면 불필요한 오버 헤드가 기록 수있는 것입니다 (즉, 하나의 이벤트에 여러 가지가 등록되어 있음). 다른 좋은 이유가 있습니까? 이벤트 등록을 취소하지 갑자기 기 때문에 중요한 문제가있는 사람이 있습니까?
당신이 경우에 A
이벤트를 게시하고 B
이벤트 (핸들러)에 가입, 다음과 같은 경우 탈퇴 할뿐 아니라 문제가 A
이상 많이 살 것입니다 B
. 기본적으로 이벤트 구독 A
은 여전히를 볼 수 B
있으므로 가비지 수집을 방지하고 잊어 버린 경우에도 이벤트를 계속 발생하는 Disposed()
경우.
예를 들어, A
정적 이벤트 인 경우 문제 가되고 앱이 종료 된 후 잠시 동안 실행
B
... B
아직만큼 오래 A
유지되고 B
가비지 수집되지 않습니다.
다음과 같은 질문을 할 수 있습니다.
B가 A보다 훨씬 오래 살면 B가 A가 가비지 수집되지 않을까요?
이에 대한 대답은 "아니오"입니다. B는 이벤트를 통해 A를 참조하지 않습니다. A는 곧 수집됩니다.
많은 사람들은 게시자가 구독자보다 더 오래 살아남을 경우 이벤트 구독을 취소하는 것이 중요하다고 생각하는 것입니다. 나는 그만 싫어한다. 게시자로부터 자신을 분리하지 않는 이벤트 구독자는 게시자 및 구독자 외부의 엔터티 동작에 분리를 만듭니다. 게시자에 대한 참조가 예상보다 오래 유지되면 구독자가 참조를 보유하고 있습니다. 대량의 수집이 이벤트에 의해 상호 연결되어 있고 스윕 될 수 있습니다. 그러나 누군가가있는 곳에서 얻을 수없는 것입니다.
IMHO, 이벤트를 버리고 모든 것이 정리되기를 바라는 것보다 사전에 이벤트를 제거하는 것이 훨씬 낫습니다. 게시자에 대한 예상치 못한 참조가 존재하지 않는다고 확신 할 수없는 경우 접근 방식은 '대부분'작동하지만 가끔 메모리 누수가 발생합니다.
참고 URL : https://stackoverflow.com/questions/1061727/is-it-bad-to-not-unregister-event-handlers
'ProgramingTip' 카테고리의 다른 글
이벤트 처리기를 등록 취소하는 방법 (0) | 2020.11.21 |
---|---|
NULL을 허용하는 MySQL 외래 키? (0) | 2020.11.21 |
열 너비가 고정 된 LaTeX 테이블의 셀 내용을 중앙에 배치하는 방법은 무엇입니까? (0) | 2020.11.21 |
Android 웹 애플리케이션 구성 (0) | 2020.11.21 |
C ++에서 배열 타임에 프로그래밍 방식으로 정적 배열 만들기 (0) | 2020.11.21 |