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 :

Créer un compteur pour connaitre le nombre d'instance d'une classe


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 66
    Points : 50
    Points
    50
    Par défaut Créer un compteur pour connaitre le nombre d'instance d'une classe
    Bonjour pour les besoins de mon projet,

    j'ai besoin de savoir combien d'élément d'une classe il existe dans tout mon projet.

    J'ai donc placé une variable statique
    que j'incrémente à chaque création.

    Bon maintenant je dois décrémenter ce compteur à chaque destruction.

    Etant plutôt un programmeur en C++, je veux le mettre dans le destructeur.
    Mais on me dit que cela ne se fait pas trop de modifier le destructeur en C#.

    Y-a-t-il une autre fonction qui serait appelé par défaut par le destructeur?

    Merci de toute aide.

    L'elfe d'Azur

  2. #2
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Etant donné que c'est une variable statique, cela devrait aller en la modifiant dans le destructeur.

    Mais je me trompe peut-être.
    Blog - Articles - Framework

    MSDN vous aide, si si, alors n'hésitez pas à y faire un tour avant de poser une question.
    Ah, et n'oubliez pas, Google peut répondre à la majorité de vos questions.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    Je viens de lire dans mon book (lu en biais)
    si tu met un destructeur, ca equivaut à réécrire Finalize()
    du coup, ton object survivra à la premiere collecte du GC.

    En clair, c'est juste qu'il mettra plus de temps que les autres objets à etre détruit. Mais comme de toute facon, on ne controle pas le moment où l'objet est détruit.... j'aurai tendance à dire qu'on s'en moque un peu...

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Implémenter l'interface IDisposable pour vos objets et décrémentez, de manière thread-safe, votre compteur static dans la méthode Dispose.
    Regardez la documentation pour que l'objet n'ait pas à passer par le finalizer quand il a déjà été "disposé".
    Une décrémentation dans le finalizer, en cas de non appel à Dispose, pour les têtes en l'air ou les feignants, devrait aussi exister.

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    66
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 66
    Points : 50
    Points
    50
    Par défaut
    Merci pour vos réponses,

    je vais essayer de regarder un peu plus la documentation sur IDisposable pour voir ci cela peut me convenir.

  6. #6
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Un truc genre ça quoi ?
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
            class Machin : IDisposable
            {
                static int instance_count = 0;
                private bool disposed = false;
     
                public Machin()
                {
                    System.Threading.Interlocked.Increment(ref instance_count);
                }
     
                public static int InstanceCount
                {
                    get { return instance_count; }
                }
     
                public void Dispose()
                {
                    Dispose(true);
     
                    GC.SuppressFinalize(this);
                }
     
                private void Dispose(bool disposing)
                {
                    if (!this.disposed)
                    {
                        System.Threading.Interlocked.Decrement(ref instance_count);
     
                        disposed = true;
     
                    }
                }
     
                ~Machin()
                {
                    Dispose(false);
                }
            }

Discussions similaires

  1. Commande pour connaitre le nombre de lettres d'une variable
    Par AZzjeioafh dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 04/12/2009, 07h45
  2. Compter le nombre d'instance d'une classe
    Par cashmoney dans le forum Langage
    Réponses: 2
    Dernier message: 21/09/2009, 11h31
  3. Réponses: 1
    Dernier message: 28/04/2009, 11h49
  4. Compter le nombre d'instance d'une classe
    Par themadmax dans le forum C#
    Réponses: 6
    Dernier message: 12/07/2008, 09h48
  5. Réponses: 16
    Dernier message: 06/06/2008, 21h25

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