Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Kāda ir labākā prakse, lai abonētu no notikumiem MVVMCross


Kāda ir labākā prakse, lai abonētu no notikumiem MVVMCross


Atbrīvošana no notikumiem MVVMCross ir būtiska, lai novērstu atmiņas noplūdes un nodrošinātu, ka jūsu lietojumprogramma uzvedas, kā paredzēts. Šeit ir dažas labākās prakses, lai abonētu no notikumiem MVVMCross:

1. Izmantojot `imvxMessenger` **

MVVMCROSS nodrošina spraudni “IMVXMessenger”, kas ļauj publicēt un abonēt notikumus, izmantojot vājas atsauces. Tas nozīmē, ka tad, kad abonenta objekts vairs netiks atsaukts citur jūsu kodā, tas tiks savākts atkritumos un abonements automātiski tiks noņemts. Tomēr, ja jums skaidri jāapraksta abonēšana, varat izmantot metodi `aboncepcy` uz“ imvxMessenger ”vai zvanīt` dispose () `uz abonementa marķiera, kas atgriezts ar“ abonēšanas ”metodi [1].

2. Abonēšanas marķieru glabāšana **

Abonējot notikumus, izmantojot `IMVXMessenger`, ir svarīgi saglabāt abonementa marķieri, ja plānojat abonēt manuāli. Ja marķieris netiek glabāts un tiek savākts atkritumi, abonements tiks automātiski noņemts. Tas var izraisīt negaidītu izturēšanos, ja jūs paļaujaties uz to, ka abonements ir aktīvs noteiktā laika posmā [1] [7].

3. Ievietošana `Idisposable` **

Nodarbībām, kas abonē notikumus, laba prakse ir “Idisposable” interfeisa ieviešana. Metodē “iznīcināt” jūs varat skaidri abonēt no notikumiem, lai pārliecinātos, ka resursi tiek atbrīvoti, kad objekts vairs nav vajadzīgs. Šī pieeja palīdz novērst atmiņas noplūdes, nodrošinot, ka notikumu apstrādātāji tiek noņemti, kad abonents tiek iznīcināts [4] [9].

4. Izvairīšanās no nevajadzīgiem abonementiem **

Pārliecinieties, ka esat abonējis notikumus tikai vajadzības gadījumā un abonējiet, kad abonements vairs nav vajadzīgs. Izvairieties atkārtoti abonēt un abonēt to pašu notikumu klases gadījuma dzīves laikā, jo tas var izraisīt nevajadzīgu sarežģītību un iespējamās problēmas [4].

5. Izmantojot vājas atsauces **

MVVMCROSS `IMVXMessenger` pēc noklusējuma izmanto vājas atsauces, kas ļauj abonentus savākt atkritumos, ja uz tām vairs nav atsauce citur jūsu kodā. Tas palīdz novērst atmiņas noplūdes, bet nepieciešama rūpīga abonēšanas žetonu pārvaldība, ja nepieciešama manuāla abonēšana [1] [3].

6. apstrādes lietojumprogrammu dzīves cikla notikumi **

MVVMCROSS jūs varat arī rīkoties ar lietojumprogrammu dzīves cikla notikumiem, piemēram, `Onexit` failā` app.xaml.cs`. Ja jums ir jāveic tīrīšana vai jāapraksta no notikumiem, kad lietojumprogramma iziet, šī ir piemērota vieta, kur to darīt. Tomēr pārliecinieties, ka jums ir atsauce uz nepieciešamajiem skata modeļiem vai pakalpojumiem, lai veiktu nepieciešamās darbības [2].

Izpildot šo praksi, jūs varat efektīvi pārvaldīt notikumu abonementus MVVMCross un pārliecināties, ka jūsu lietojumprogramma paliek efektīva un bez atmiņas noplūdēm.

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