[OnPropertyChanged] Fuites mémoire
Salut,
J'ai posté un message il y a quelques temps sur les performances... Après quelques réponses qui m'ont aiguillé je peux me rendre compte aujourd'hui que mes gros soucis de fuites mémoire sont liés au "OnPropertyChanged" (je dois encore faire des tests pour vraiment en être sur).
En effet, j'ai une fenêtre très très chargée en composants (100 environ dont 2 DataGrid Telerik) et beaucoup de liaisons et d'appels dynamiques entre eux.
En enlevant simplement l'appel à mes ObservableCollection en OnPropertyChanged il me faut au moins 100 clics entre ma fenêtre d'accueil et cette fenêtre pour passer de 100 megs à 200 megs (processus IExplorer dans le gestionnaire des tâches).
En les réactivant : au bout de 12 clics je suis à 200 megs et ça freeze méchamment.
Ma question : l'un d'entre vous aurait-il concrètement implémenté un pattern genre WeakEvent que j'ai du mal à comprendre pour le moment ?
A part ce pattern (en espérant qu'il fonctionne bien), connaissez vous d'autres solutions pour "vider" la mémoire ? j'ai essayé le GC mais rien ne se passe...
Merci pour vos réponses,
INotifyDataErrorInfo - fuite mémoire
Salut,
Si tu cherches toujours, as-tu regardé du côté de la fuite mémoire due à l'implémentation de INotifyDataErrorInfo dans les entities de RIA Services? C'est surement le problème que tu rencontres.
http://www.baud.cz/blog/memory-leak-...ydataerrorinfo
La classe Entity implémente l'interface INotifyDataErrorInfo. Lorsqu'on bind une entité sur une propriété d'un controle, par défaut, le framework rajoute un handler (NotifyDataErrorHandler je crois) sur l'objet. Cela crée une référence vers ce controle qui ne sera jamais enlevée... Résultat: pour peu que tes entités persistent, le controle n'est jamais éliminé par le GC.
Pour binder quand même une entité à un controle, tu peux contourner le problème en rajoutant dans les propriétés du Binding:
Code:
{Binding Path=MyProperty, ... , NotifyOnValidationError=False}
Malheureusement, dans certain, cas ce sera pas suffisant, notamment avec les collections d'entités liées à des ItemsControls et autres controles de liste.
Le mieux reste de passer par des POCOs qui n'implémenteront pas l'interface en question ou d'attendre une correction dans la prochaine version de Silverlight.
En espérant que ça t'aide.