Ostatnie

28 marca 2025

Prism 9.0 - Subskrybowanie z wykorzystaniem silnych odniesień


Subskrybowanie z wykorzystaniem silnych odniesień
Prism 9.0 to nowa wersja naszego ulubionego frameworka do WPF, który przychodzi z kilkoma ciekawymi zmianami. Jedną z ważniejszych rzeczy jest wprowadzenie obsługi subskrypcji z wykorzystaniem silnych odniesień (strong references). Brzmi to trochę technicznie, ale zaraz wyjaśnię, o co chodzi i jak to wpływa na naszą pracę.

Co to w ogóle jest ta subskrypcja?

Żeby zrozumieć, o co chodzi, musimy zacząć od podstaw. W aplikacjach MVVM (Model-View-ViewModel) mamy model, widok i widok-model, które muszą jakoś ze sobą komunikować. Kiedy coś w modelu się zmienia, widok musi się o tym dowiedzieć i zaktualizować interfejs. Do tego służy właśnie subskrypcja – to taki mechanizm nasłuchiwania na zmiany, który pozwala powiadomić zainteresowane obiekty, że coś się zmieniło.

Prism świetnie wspiera tę komunikację dzięki takim mechanizmom jak EventAggregator czy Messenger, które pozwalają na łatwe subskrybowanie i wysyłanie wiadomości między różnymi częściami aplikacji.

Co to znaczy silne odniesienia?

W starszych wersjach Prism mieliśmy do czynienia z tzw. słabymi odniesieniami (weak references). To oznaczało, że obiekty subskrybujące były trzymane w pamięci tylko do momentu, gdy były aktywnie potrzebne. Jeśli obiekt przestawał być potrzebny (np. widok przestawał subskrybować), to był automatycznie usuwany z pamięci, żeby nie powodować wycieków. W teorii świetne rozwiązanie, ale w praktyce czasami pojawiały się problemy – obiekt mógł zostać usunięty z pamięci zanim zdążył odpowiednio zareagować na zmianę.

No i teraz mamy Prism 9.0, gdzie zamiast słabych odniesień wprowadzono silne odniesienia. W skrócie oznacza to, że obiekt subskrybujący (np. widok) jest trzymany w pamięci przez cały czas, jak jest subskrybentem. Dopóki subskrypcja trwa, nie zostanie usunięty. Dzięki temu masz pewność, że obiekt nie zniknie, zanim będzie miał szansę zareagować na zmiany.

Po co to komu?

  1. Większa pewność i stabilność – Dzięki silnym odniesieniom wiesz, że subskrybent będzie w pamięci tak długo, jak tego chcesz. Nie musisz się martwić, że obiekt zniknie w nieodpowiednim momencie, co mogłoby prowadzić do dziwnych bugów.

  2. Lepsza kontrola nad pamięcią – Teraz masz pełną kontrolę nad cyklem życia obiektu subskrybującego. Jeśli widok przestaje być potrzebny, to możesz sam zdecydować, kiedy go wyrzucić. A to bardzo przydatne w większych aplikacjach.

  3. Mniejsze ryzyko wycieków pamięci – Dzięki temu, że obiekty są trzymane w pamięci tak długo, jak trzeba, nie musisz się martwić, że zapomnisz o jakimś obiekcie i będzie on niepotrzebnie trzymany w pamięci.

  4. Łatwiejsza integracja – Prism 9.0 z silnymi odniesieniami jest bardziej kompatybilny z innymi bibliotekami i frameworkami, co w dużych projektach, gdzie integrujemy różne technologie, jest bardzo przydatne.

A jakie są minusy?

Jasne, silne odniesienia to nie jest rozwiązanie bez wad. Główne ryzyko to to, że obiekty będą trzymane w pamięci dłużej, co w większych aplikacjach może prowadzić do problemów z zarządzaniem pamięcią. Jeśli nie będziesz dbał o czyszczenie subskrypcji, to może się zdarzyć, że obiekty będą zalegać w pamięci i w końcu prowadzić do wycieków.

Na szczęście Prism 9.0 daje ci narzędzia, żeby zarządzać subskrypcjami w sposób odpowiedzialny. Jak nie zapomnisz o usuwaniu niepotrzebnych subskrypcji, to nie ma problemu.

Podsumowanie

Prism 9.0 z silnymi odniesieniami to krok w stronę większej stabilności i łatwiejszego zarządzania pamięcią w aplikacjach WPF. Subskrypcje, które teraz opierają się na silnych odniesieniach, dają większą kontrolę nad tym, jak długo obiekty subskrybujące są trzymane w pamięci, co sprawia, że aplikacje działają stabilniej i szybciej. Oczywiście, wymaga to od programisty trochę większej uwagi, żeby pamiętać o czyszczeniu subskrypcji, ale korzyści z tego rozwiązania zdecydowanie przewyższają ryzyko. To krok w stronę bardziej niezawodnych aplikacji, ajęzyk C Sharp napewno sprawi że tworzenie aplikacji będzie przyjemniejsze.

Brak komentarzy:

Prześlij komentarz