none
Garbage collection: comportement avec les événements

    Question

  • Bonjour à tous,

    J'ai une petite question à propos de l'utilisation de la mémoire.

    Lorsqu'il n'y a plus de références à une instance d'un classe donnée (à l'exception d'événements), peut-elle être "garbage collected" ?

    public class MyClass
    {
       public delegate void OnItemSavedHandler; public static event OnItemSavedHandler OnItemSaved;
    
       public MyClass()
       {
          OnItemSaved += MyClass_OnItemSaved;
       }
    
       void MyClass_OnItemSaved()
       {
          ...
       }
    }

    Si oui, je peux implémenter un destructeur pour se désabonner des événements.

    J'ai besoin de garder l'abonnement aux événements aussi longtemps que vit l'objet.

    J'ai lu beaucoup de choses à ce sujet mais je n'ai pas vraiment compris vu le niveau de complexité des exemples.

    Merci d'avance pour votre aide.


    • Modifié NicolasC mercredi 28 septembre 2016 17:18
    mardi 27 septembre 2016 18:14

Réponses

  • Bonjour,

    Je ne comprends pas votre exemple : vous avez une classe qui a un évènement et qui s'abonne à son évènement ?!!!Donc je pense plutôt que ce que vous voulez dire c'est :

    J'ai une classe A qui a déclarée un évènement. Une autre classe B s'abonne à cet évènement. Quand est-ce que A sera "garbage collectée" ?

    La réponse est simple : tant qu'une référence est faite à un objet, ce dernier n'est pas supprimé de la mémoire par le GC et l'abonnement a un évènement est une référence forte.

    Concernant les destructeurs, avoir besoin d'en écrire est très souvent un indicateur de mauvaise conception (sauf si il y a consommation de ressources non managées externes).


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    • Marqué comme réponse NicolasC samedi 1 octobre 2016 08:31
    jeudi 29 septembre 2016 06:54

Toutes les réponses

  • Bonjour NicolasC,

    Vous avez contacté le forum MSDN France. S'il vous plaît modifiez votre question en français pour que la communauté puisse vous aider. Merci d'avance.

    Cordialement,

    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    mercredi 28 septembre 2016 07:58
    Modérateur
  • Bonjour,

    Je ne comprends pas votre exemple : vous avez une classe qui a un évènement et qui s'abonne à son évènement ?!!!Donc je pense plutôt que ce que vous voulez dire c'est :

    J'ai une classe A qui a déclarée un évènement. Une autre classe B s'abonne à cet évènement. Quand est-ce que A sera "garbage collectée" ?

    La réponse est simple : tant qu'une référence est faite à un objet, ce dernier n'est pas supprimé de la mémoire par le GC et l'abonnement a un évènement est une référence forte.

    Concernant les destructeurs, avoir besoin d'en écrire est très souvent un indicateur de mauvaise conception (sauf si il y a consommation de ressources non managées externes).


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    • Marqué comme réponse NicolasC samedi 1 octobre 2016 08:31
    jeudi 29 septembre 2016 06:54