Gestione della memoria delle proprietà WPF

4

Sto cercando di creare un sistema di binding simile a quello utilizzato in WPF e ho riscontrato alcuni problemi di perdita di memoria, quindi ecco che arriva la mia domanda: come viene gestita la memoria nel sistema di proprietà WPF?

Da quello che so nei valori WPF di DependencyProperties sono memorizzati in contenitori esterni - quello che voglio sapere è come vengono raccolti quando DependencyObject muore?

La soluzione più semplice sarebbe quella di archiviarli è un dizionario di riferimento debole - ma qui viene il problema principale a cui mi sono imbattuto - quando c'è un listener sulla proprietà che deve fare riferimento al suo genitore (questa proprietà) che lo tiene (il genitore) vivo (quando il valore del dizionario di riferimento debole punta da qualche parte, anche indirettamente, alla chiave: non può essere raccolto).

Come viene evitato in WPF senza la necessità di usare riferimenti deboli ovunque?

    
posta mrpyo 28.05.2014 - 16:24
fonte

1 risposta

1

WPF fa ampio uso di riferimenti deboli proprio per questo motivo. Anche se può essere un po 'difficile da implementare, è la risposta corretta qui. Quando si discute del modello di riferimento di riferimento debole, Microsoft scrive che :

Implementing the weak event pattern is interesting primarily for control authors. As a control author, you are largely responsible for the behavior and containment of your control and the impact it has on applications in which it is inserted. This includes the control object lifetime behavior, in particular the handling of the described memory leak problem.

Certain scenarios inherently lend themselves to the application of the weak event pattern. One such scenario is data binding. In data binding, it is common for the source object to be completely independent of the listener object, which is a target of a binding. Many aspects of WPF data binding already have the weak event pattern applied in how the events are implemented."

Dato che stai scrivendo qualcosa seguendo queste linee, dal suono di esso, dovresti usare questo schema.

    
risposta data 28.05.2014 - 18:30
fonte

Leggi altre domande sui tag