4

Je me demande quelles sont les meilleures pratiques pour travailler avec CollectionViews dans WPF en particulier l'utilisation de la méthode CollectionViewSource.GetDefaultView(). Quelqu'un at-il rencontré des problèmes avec l'utilisation de GetDefaultView? Nous craignons que cela puisse causer des fuites de mémoire.Fuite de mémoire avec CollectionViewSource.GetDefaultView() dans WPF?

Est-il généralement une meilleure pratique de créer ListCollectionViews manuellement plutôt que de compter sur GetDefaultView()?

Comment WPF gérer ces vues? Est-ce qu'ils obtiennent GC'd quand la collection fait? J'ai vu des articles disant que vous devez détacher CollectionViews de leur collection source sinon vous aurez une fuite de mémoire.

Merci pour votre aide!

Répondre

2

Bea déclare utiliser CollectionViewSource.GetDefaultView() comme favorite way for accessing the view d'une collection donnée. En outre, je n'ai personnellement jamais rencontré de problèmes en utilisant le CollectionViewSource.GetDefaultView() mais il est certainement possible dans un scénario donné.

Vous devez comprendre que chaque collection a une vue par défaut et que lorsque vous liez une propriété donnée à une collection donnée, WPF encapsule automatiquement la collection avec une vue et la lie à la vue; pas la collection. Étant donné que cela fait partie du cadre WPF, vous devez alors supposer que chaque collection ayant une vue qui lui est associée sera ensuite éliminée lorsque la collection sera éliminée. S'il y a une référence à la collection via une propriété bindable, il y a alors une vue associée référençant la collection si vous faites un appel à CollectionViewSource.GetDefaultView() ou non, donc vous seriez toujours dans la même situation.

Empirique evidence existe que jusqu'à ce que la collection est hors de portée les vues associées ne seront pas GC'ed; Cependant, gardez à l'esprit qu'il s'agissait d'une collection avec des outils INotifyCollectionChanged.

Sur la base de votre situation une relation 1: 1 entre la collecte et la vue associée peut exister et donc le couplage peut fournir aucun obstacle que ce soit. Dans ce scénario, la vue GC'ed une fois que la collection est hors de portée n'est pas un problème.

Il s'agit de marcher avec précaution et de s'assurer que vous savez ce qui se passe sous les couvertures pour les situations plus complexes afin que vous puissiez prendre les mesures appropriées.