ProgramingTip

취소하지 않는 것이 나쁜가요?

bestdevel 2020. 11. 21. 09:29
반응형

취소하지 않는 것이 나쁜가요?


몇 개의 이벤트가없는 경우 등록 된 애플리케이션이 있고 이벤트를 사용하는 것이 삭제는 애플리케이션이 닫힐 때까지 걱정할 필요가없는 경우 등록 취소에 대해 할 필요가 있습니까? 내가 볼 수있는 유일한 좋은 이유는 이벤트가 발생하면 불필요한 오버 헤드가 기록 수있는 것입니다 (즉, 하나의 이벤트에 여러 가지가 등록되어 있음). 다른 좋은 이유가 있습니까? 이벤트 등록을 취소하지 갑자기 기 때문에 중요한 문제가있는 사람이 있습니까?


당신이 경우에 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

반응형