IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Faut il toujours se déconnecter des event ? [Débutant]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Par défaut Faut il toujours se déconnecter des event ?
    Bonjour,

    Je réalise une application en WPF. Dans cette appli, je dispose de classes (appelé ViewModel) implémentant INotifyPropertyChanged, qui permet d'envoyer un event a chaque modification d'un attribut.

    Je dispose d'une classe (appelons la ViewModelManager pour l'exemple) qui contient un ViewModel et qui souhaite être informé d'une modification dans ViewModel. Du coup, dans le constructeur, je m'abonne à l'event du ViewModel, soit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public ViewModelManager
    {
      ViewModel = new ViewModel();
      ViewModel += ViewModelPropertyChanged;
    }
    Ma question est : dois je me déconnecter de l'évent (en implémentant IDisposable par exemple) sachant que 'ViewModel' et 'ViewModelManager' seront éligibles à la GC en même temps (en gros, 'ViewModel' n'est jamais modifié sans que 'ViewModelManager' ne soit lui même modifié). Pour moi, la destruction de 'ViewModelManager' devrait mettre fin à la connexion mais j'ai peur que cette même connexion "bloque" l'éligibilité à la GC... C'est pourquoi je serais pas contre une confirmation de quelque de plus expérimenté

    Merci d'avance !

  2. #2
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Petit rappel sur le fonctionnement du ramasse-miette et de la gestion des événements pour répondre à la question.

    Le ramasse-miette peut collecter un objet dès lorsque que celui n'est plus utilisé.

    Maintenant, du côté de la gestion des événements. Une ligne telle que ViewModel.OnPropertyChanged += ViewModelPropertyChanged va créer un lien entre l'événement OnPropertyChanged et l'objet référencé par this, car la méthode ViewModelPropertyChanged est une méthode d'instance et non une méthode de classe (ou statique) et a donc besoin de garder une référence de l'instance.

    Aussi, s'il n'y a plus une seule référence à l'objet pointé par this, alors il ne sera pas collecté tant que l'objet ViewModel ne sera pas lui-même collecté.

    A noter que le lien est dans un seul sens, c'est-à-dire que l'objet ViewModel empêche this d'être collecté, mais l'inverse n'est pas vrai.

    Pour en revenir à la question initiale : tu n'as rien à faire

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2011
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2011
    Messages : 56
    Par défaut
    Bonjour dorinf,

    Avant tout, merci pour ta réponse !!

    C'est bien ce qu'il me semblait mais je préférais être sûr avant de me lancer là dedans (car j'ai plusieurs classes qui sont dans le cas de 'ViewModelManager' dans mon code. Je vais donc partir la dessus !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Perfo : Faut-il toujours faire des jointures ?
    Par Invité dans le forum Requêtes
    Réponses: 4
    Dernier message: 08/06/2011, 19h57
  2. Réponses: 6
    Dernier message: 27/10/2005, 13h58
  3. Associer des Events
    Par Capt. Flame dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 26/10/2005, 16h39
  4. [C#] Gestion des Events d'un control Composite
    Par lord_paco dans le forum ASP.NET
    Réponses: 3
    Dernier message: 07/10/2005, 10h10
  5. probleme de date (toujours et encore des dates)
    Par Yannesco dans le forum SQL
    Réponses: 3
    Dernier message: 02/02/2004, 20h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo