2011-10-25 11 views
7

Zrobić bardzo długą historię ... To jest w dużym projekcie WPFKiedy tworzony jest PropertyChangedEventManager i kiedy jest on dołączony?

Mam klasy "Pacjent", który implementuje INotifyPropertyChanged. Kiedy pozbywam się tej klasy, sprawdzam, czy PropertyChangedEventHandler ma wartość null, a jeśli nie, uruchom ją w klasie ListenerDetector, która rejestruje detektory, abyśmy mogli je wyśledzić i wyczyścić wycieki. Pacjent ma pewne właściwości, które są związane z elementami WPF, a także z innymi obiektami, które używają do monitorowania zmian w PropertyChanged.

Po usunięciu wszystkiego innego, mój wynik dziennika jest następująca:

Log: Pacjent nadal ma następującą słuchacza (y) załączone: - System.ComponentModel.PropertyChangedEventManager

Pytanie: Kiedy jest Utworzono PropertyChangedEventManager?

  • Kiedy pacjent jest tworzony
  • Kiedy WPF wiąże własności Pacjenta
  • Jakiś inny punkt.

Jeśli Patient.PropertyChangedEventHandler jest ustawiony na null a zatem odłączony od PropertyChangedEventManager jest jakiś sposób, aby odtworzyć Manager i mieć go słuchać ponownie Patient.PropertyChangedEventHandler? Proszę nie pytać, dlaczego tak się stało, że jest punktem napięcia tutaj :-(

Odpowiedz

7

PropertyChangedEventManager jest tworzony przez WPF w celu wspierania wiązanie do jakiejkolwiek klasy, która implementuje INotifyPropertyChanged. To będzie tworzone i wykorzystywane jako szybko, jak wiążą się dowolny klasy, która implementuje INotifyPropertyChanged.

powiedział, że jego implementacja wzorca WeakEventManager. Mimo to nadal pokazując słuchacza załączony, uświadomić sobie, że słuchacz jest przymocowany za pomocą Weak Event Pattern. będzie to duży krok od razu, gdy pojawi się pełne zbieranie śmieci, ponieważ używa słabych referencji do przetrzymywania subskrypcji. być przyczyną (długoterminowego) wycieku pamięci.

Powiązane problemy