Az MVVMCross eseményeiből való feliratkozás elengedhetetlen a memória -szivárgások megelőzésében és annak biztosítása érdekében, hogy az alkalmazás a várt módon viselkedjen. Íme néhány bevált gyakorlat az MVVMCross eseményeiből való leiratkozáshoz:
1. Az `imvxMessenger '** használatával
Az MVVMCross biztosítja az `imvxMessenger` plugint, amely lehetővé teszi az események közzétételét és feliratkozását gyenge referenciák segítségével. Ez azt jelenti, hogy ha az előfizetői objektumot már nem hivatkoznak a kód másutt, akkor az összegyűjtött szemét lesz, és az előfizetés automatikusan eltávolításra kerül. Ha azonban kifejezetten leiratkoznia kell, akkor használhatja a „Unsubscribe`” módszert az `imvxMessenger 'vagy a„ Dispose () ”híváson az előfizetési tokenre, amelyet az előfizetési módszerrel visszaadtak [1].
2. Előfizetési tokenek tárolása **
Amikor az „ImvxMessenger” használatával feliratkozik az eseményekre, elengedhetetlen az előfizetési token tárolása, ha azt tervezi, hogy manuálisan leiratkozik. Ha a tokent nem tárolják, és összegyűjtik a szemetet, akkor az előfizetés automatikusan eltávolításra kerül. Ez váratlan viselkedéshez vezethet, ha arra támaszkodik, hogy az előfizetés egy adott időszakban aktív legyen [1] [7].
3. Az Idisposable "** megvalósítása
Az eseményekre feliratkozó osztályok esetében az „Idisposable” felület megvalósítása jó gyakorlat. A „Dispose” módszerben kifejezetten leiratkozhat az eseményekről annak biztosítása érdekében, hogy az erőforrások felszabaduljanak, amikor az objektum már nincs szükség. Ez a megközelítés segít megakadályozni a memória szivárgásait azáltal, hogy az eseménykezelők eltávolítását végzik, amikor az előfizető ártalmatlanul [4] [9].
4. A felesleges előfizetések elkerülése **
Győződjön meg arról, hogy szükség esetén csak az eseményekre iratkozzon fel, és írja le, ha az előfizetésre már nincs szükség. Kerülje az ismételt feliratkozást és feliratkozást ugyanazon eseményre egy osztálypéldány életében, mivel ez felesleges bonyolultsághoz és potenciális kérdésekhez vezethet [4].
5. Gyenge referenciák használatával **
Az Mvvmcross „ImvxMessenger” alapértelmezés szerint gyenge referenciákat használ, amelyek lehetővé teszik az előfizetők számára, hogy összegyűjtsék a szemetet, ha már nem hivatkoznak a kódban. Ez elősegíti a memória szivárgásainak megelőzését, de az előfizetési tokenek gondos kezelését igényli, ha kézi leírásra van szükség [1] [3].
6. Az alkalmazás életciklus -eseményeinek kezelése **
Az MVVMCross alkalmazásban az „App.xaml.cs” fájlban az „OneXIT” -ben is kezelheti az alkalmazás életciklus -eseményeit is. Ha tisztítást kell végeznie, vagy leiratkoznia kell az eseményekről, amikor az alkalmazás kilép, akkor ez egy megfelelő hely erre. Győződjön meg arról, hogy van -e hivatkozással a szükséges nézeti modellekre vagy szolgáltatásokra a szükséges műveletek végrehajtásához [2].
Ezeknek a gyakorlatoknak a követésével hatékonyan kezelheti az esemény előfizetéseit az MVVMCross -ban, és biztosíthatja, hogy az alkalmazás hatékony és mentes maradjon a memóriaszivárgásoktól.
Idézetek:[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_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-and-unsubsubscribe-From-events
[7] https://stackoverflow.com/questions/19781446/how-to-unsubscriftion-for-weaksubscribe-in-mvvmcross
[8] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[9] https://dev.to/moh_moh701/c-advanced-unsubsubscriping-from-events-7ea
[10] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle