Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kokia yra geriausia praktika atsisakant įvykių MVVMCross


Kokia yra geriausia praktika atsisakant įvykių MVVMCross


Nutraukimas dėl įvykių MVVMCross yra labai svarbus siekiant užkirsti kelią atminties nutekėjimui ir užtikrinti, kad jūsų pritaikymas elgtųsi taip, kaip tikėtasi. Čia yra keletas geriausių praktikų, skirtų atsisakyti įvykių MVVMCross:

1. Naudojant `imvxmessenger` **

„Mvvmcross“ pateikia „IMVXMessenger“ papildinį, kuris leidžia jums paskelbti ir užsiprenumeruoti renginius, naudojant silpnas nuorodas. Tai reiškia, kad kai abonento objektas nebebus nurodomas kitur jūsų kode, jis bus surinktas šiukšlėmis, o prenumerata bus automatiškai pašalinta. Tačiau jei jums reikia aiškiai atsisakyti prenumeratos, galite naudoti „imvxmessenger“ metodą „panaikinti“ arba paskambinti „dispose ()“ pagal prenumeratos ženklą, grąžintą „prenumeruoti“ metodu [1].

2. Prenumeratos žetonų saugojimas **

Prenumeruojant įvykius, naudojančius „IMVXMessenger“, labai svarbu išsaugoti prenumeratos prieigos raktą, jei planuojate atsisakyti prenumeratos rankiniu būdu. Jei žetonas nebus saugomas ir surinktas šiukšlėmis, prenumerata bus automatiškai pašalinta. Tai gali sukelti netikėtą elgesį, jei pasikliaujate tuo, kad tam tikru laikotarpiu pasirašysite aktyvumą [1] [7].

3. Įdiegimas „Idisposable“ **

Užsiėmimams, kurie užsiprenumeruoja įvykius, „Idisposable“ sąsajos įgyvendinimas yra gera praktika. „Dispose“ metodu galite aiškiai atsisakyti įvykių prenumeratos, kad įsitikintumėte, jog ištekliai bus išleisti, kai objekto nebereikia. Šis metodas padeda išvengti atminties nutekėjimo užtikrinant, kad įvykių tvarkytojai būtų pašalinti, kai abonentė bus pašalinta [4] [9].

4. Venkite nereikalingų prenumeratų **

Įsitikinkite, kad prenumeruojate įvykius tik tada, kai reikia, ir atsisakykite prenumeratos, kai prenumeratos nebereikia. Venkite pakartotinai užsiprenumeruoti ir atsisakyti to paties įvykio per klasės egzempliorių gyvenimą, nes tai gali sukelti nereikalingą sudėtingumą ir galimas problemas [4].

5. Naudojant silpnas nuorodas **

„MVVMCross“ „IMVXMessenger“ naudoja silpnąsias nuorodas pagal numatytuosius nustatymus, o tai leidžia abonentams surinkti šiukšles, jei jie nebebus nurodomi kitur jūsų kode. Tai padeda išvengti atminties nutekėjimo, tačiau reikia atidžiai valdyti prenumeratos žetonus, jei reikalingas rankinis atsisakymas [1] [3].

6. Taikymo programos gyvenimo ciklo įvykiai **

„MVVMCross“ taip pat galite tvarkyti programų gyvenimo ciklo įvykius, tokius kaip „Onexit“ faile „App.xaml.cs“. Jei jums reikia atlikti valymą arba atsisakyti įvykių prenumeratos, kai programa pasitraukia, tai yra tinkama vieta tai padaryti. Tačiau įsitikinkite, kad turite nuorodą į būtinus rodinio modelius ar paslaugas, kad atliktumėte reikiamus veiksmus [2].

Vykdydami šią praktiką, galite efektyviai valdyti įvykių prenumeratas MVVMCross ir įsitikinti, kad jūsų programa išliks efektyvi ir be atminties nutekėjimo.

Citatos:
[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_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-to--nsubsbscribe-from-events
[7] https://stackoverflow.com/questions/19781446/how-to-unoubscribe-for-weaksubscribe-in-mvvmcross
[8] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[9] https://dev.to/moh_moh701/c-advanced-unsubscricing-from-events-7ea
[10] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle