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 :

desouscription et Dispose


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut desouscription et Dispose
    ma classe souscrit à des évènements dans son constructeur ou quand on appelle des méthodes dessus.
    Quand la fonction Dispose de ma classe est appelée, doit-je desouscrire de ces évènements ou est-ce fait automatiquement ?

  2. #2
    Membre chevronné
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Février 2007
    Messages
    574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur sécurité
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2007
    Messages : 574
    Par défaut
    Il est mieux de se désouscrire.

  3. #3
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    merci de ta réponse. Je viens d'en discuter avec un collègue ce midi, et effectivement Il n'y a pas de desouscription automatique même quand le souscripteur est disposé. Donc il faut se désabonner explicitement dans le dispose du souscripteur.

  4. #4
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    En fait il y a plusieurs possiblités.

    Prenons deux classes :
    Emetteur : qui emet un event
    Souscripteur : qui écoute l'event d'Emetteur

    1) Si Emetteur est affecté à null, il sera détruit par le GC, le fait que Souscripteur ne se soit pas désinscrit ne change rien à cela. Par conséquent, les inscriptions ne maintiennent pas Emetteur en vie.
    Ce scénario suppose bien sur qu'aucun autre objet du domaine ne fait référence a Emetteur.

    2) Si Souscripteur est mis a null sans s'etre désinscrit d'Emetteur, il ne sera pas détruit par le GC car Emetteur contiendra une référence vers ce premier (afin de pouvoir appeler sa méthode). Par conséquent, il restera en vie jusqu'a ce qu'Emetteur soit lui aussi mis à null.

    Donc ce qui est faux et qui malgré tout pollue les blogs du net, c'est de dire que c'est Emetteur qui devrait faire l'effort de désinscrire tous ses Souscripteurs au moment de sa mort.

    Voici donc la principale question à réfléchir pour faire du bon boulot :

    Est-il possible que Emetteur survive plus longtemps que Souscripteur?
    Si oui, Souscripteur doit obligatoirement etre désinscrit manuellement.
    Si non, rien de spécial n'a besoin d'être fait.

    Les Emetteurs a risques sont donc ceux qui ont une durée de vie longue, par exemple les objets globaux, les eventHandlers statiques, les Singletons. Par ailleurs, il est inutile d'etre effrayé a l'idée que des références croisées entre l'émetteur et le souscripteur comme on peut en voir dans certains patterns style MVC se maintiennent en vie, le GC est suffisamment intelligent pour tuer deux objets qui se tiendraient en vie mutuellement.

  5. #5
    Membre confirmé Avatar de BigNic
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 195
    Par défaut
    En fait je me trouvais dans le cas 2) où mon émetteur vie plus longtemps que le souscripteur, d'où ma question.

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

Discussions similaires

  1. Réponses: 12
    Dernier message: 01/06/2010, 16h57
  2. [C#] méthode Dispose ?
    Par vandeyy dans le forum Windows Forms
    Réponses: 3
    Dernier message: 28/04/2005, 12h03
  3. [Outils][BootStrapper] Où peut-on disposer des sources ?
    Par Didier69 dans le forum Contribuez
    Réponses: 3
    Dernier message: 28/09/2004, 15h32
  4. [.NET] Pourquoi redéfinir la méthode dispose() d'une forme?
    Par Polyptyx dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 07/09/2004, 12h10
  5. [RaveReport] Comment disposer des DataBand cote à cote ?
    Par stepschn dans le forum Composants VCL
    Réponses: 2
    Dernier message: 21/06/2004, 09h45

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