MVVMCross의 이벤트로부터 구독 취소는 메모리 누출을 방지하고 응용 프로그램이 예상대로 작동하도록하는 데 중요합니다. 다음은 MVVMCross의 이벤트에서 구독 취소에 대한 모범 사례입니다.
1.`imvxMessenger` ** 사용
MVVMCross는`IMVXMESSENGER` 플러그인을 제공하여 약한 참조를 사용하여 이벤트를 게시하고 구독 할 수 있습니다. 즉, 가입자 객체가 더 이상 코드의 다른 곳에서 참조되지 않으면 쓰레기가 수집되고 구독이 자동으로 제거됩니다. 그러나 명시 적으로 구독을 취소 해야하는 경우 'IMVXMESSENGER'에서 'UNSBSCRIBE'메소드를 사용하거나 '구독'방법 [1]에서 반환 한 구독 토큰에서`dispose ()`호출 '`dispose ()`를 호출 할 수 있습니다.
2. 구독 토큰 저장 **
`IMVXMESSENGER '를 사용하여 이벤트를 구독 할 때, 수동으로 구독을 취소하려는 경우 구독 토큰을 저장하는 것이 필수적입니다. 토큰이 저장되지 않고 쓰레기를 수집하면 구독이 자동으로 제거됩니다. 특정 기간 동안 가입이 활성화되는 경우 예기치 않은 행동으로 이어질 수 있습니다 [1] [7].
3.`idisposable` ** 구현
이벤트를 구독하는 클래스의 경우 'idisposable'인터페이스를 구현하는 것이 좋습니다. `dispose '방법에서는 이벤트를 명시 적으로 구독하여 더 이상 객체가 필요하지 않을 때 리소스가 릴리스되도록 할 수 있습니다. 이 접근법은 가입자가 [4] [9]를 폐기 할 때 이벤트 핸들러가 제거되도록함으로써 메모리 누출을 방지하는 데 도움이됩니다.
4. 불필요한 가입 피 **
필요한 경우 이벤트 만 구독하고 구독이 더 이상 필요하지 않은 경우 구독 취소인지 확인하십시오. 클래스 인스턴스의 수명 내에서 동일한 사건에 반복적으로 구독하고 구독하지 않으면 불필요한 복잡성과 잠재적 문제가 발생할 수 있으므로 [4].
5. 약한 참조 사용 **
MVVMCROSS의`IMVXMESSENGER '는 기본적으로 약한 참조를 사용하여 가입자가 더 이상 코드의 다른 곳에서 참조되지 않으면 가입자를 수집 할 수 있습니다. 이것은 메모리 누출을 방지하는 데 도움이되지만 수동 수신이 필요한 경우 구독 토큰을 신중하게 관리해야합니다 [1] [3].
6. 응용 프로그램 라이프 사이클 이벤트 처리 **
MVVMCross에서는`app.xaml.cs` 파일의`onexit '과 같은 애플리케이션 라이프 사이클 이벤트를 처리 할 수도 있습니다. 응용 프로그램이 종료 될 때 이벤트를 청소하거나 구독을 취소 해야하는 경우이를 수행하기에 적합한 장소입니다. 그러나 필요한 조회수 또는 서비스에 대한 참조가 필요한 조치를 수행하기 위해 [2]를 수행하십시오.
이러한 관행을 따르면 MVVMCross의 이벤트 구독을 효과적으로 관리하고 응용 프로그램에 효율적이고 메모리 누출이 없는지 확인할 수 있습니다.
인용 :[1] https://www.mvvmcross.com/documentation/plugins/messenger
[2] http://stackoverflow.com/questions/30848118/capturing-the-onexit-event-in-wpf-with-mvvmcross/31784453
[3] https://prismlibrary.github.io/docs/event-aggregator.html
[4] https://www.reddit.com/r/csharp/comments/12x8e2w/always_remove_event_hander_handler_first_before_adding/
[5] https://www.mvvmcross.com/documentation/fundamentals/navigation
[6] https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/events/how-to-subscribe-ton-ensubsbribe-from-events
[7] https://stackoverflow.com/questions/19781446/how-to-unsubscribe-for-weaksubscribe-mvvmcross
[8] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[9] https://dev.to/moh_moh701/c-advanced-unsubscribing-from-events-7ea
[10] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle