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 :

Optimiser l'intanciation d'une classe


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Optimiser l'intanciation d'une classe
    Bonjour

    Voici une question que je me pose souvent

    Dans une classe j'ai une fonction qui peut etre appellée regulierement

    Cette fonction utilise des methodes d'une autre classe
    Vaut - il -mieux :

    1-Instancier cette autre classe dans la fonction (je crains que ca bouffe chaque fois des ressource : mais peut etre que le FW gere ca tres bien)

    2- Rendre cette autre classe membre de ma classe de travail et ne l'instancier donc explicitement qu'une fois.

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Perso, je crée un membre. Statique, même, si possible (i.e. si l'objet que tu crées ne dépend pas de l'objet appelant).

  3. #3
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Par défaut
    A priori, j'opterai pour le deuxième solution, moins de boulot pour le GC...

  4. #4
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci a vous deux

    Oui c'est effectivement ce que j'avais en tete !

  5. #5
    Membre émérite
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Par défaut
    J'essaie d'éviter le static

    Code : 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
     
    private MyPerson _person = null;
    private  MyPerson Person
    {
    get 
    {
      if (_person == null) _person = new MyPerson ();
     
    return _person
    }
    }
     
    public void ExecuteCode()
    {
    Personn.DoSomething();
    }

  6. #6
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par shwin Voir le message
    J'essaie d'éviter le static
    Pourquoi donc ? Dans ton exemple, si ton code est celui d'une classe A, toutes les instances de A ont besoin d'une Personne. Mais si toutes ces personnes sont identiques, ça sert à rien de coller une instance de personne dans chaque A.

  7. #7
    Expert confirmé
    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
    Par défaut
    Vis à vis de la Person qui s'initialise au premier appel, je préfère dire qu'il faut construire le membre à la création de la classe (même si je ne le fait pas toujours) car on peut parfois avoir des problèmes bizarre si on commence à faire du multithreading (déjà été dans des cas où la propriété s'exécutait deux fois sur deux threads différents et créaient donc deux fois l'objet interne, etc...).
    Initialiser un membre statique dans le constructeur statique d'une classe évite, je crois, ce genre de problèmes mais là je ne suis pas sur.

    La solution 1 est à éviter. Même si le GC fait bien son travail, ça prend du temps d'appeller le constructeur et ça le sollicite plus souvent pour rien.

    Et la solution 2 pourrai très bien fonctionner avec un membre statique, aucune raison de créer un objet par classe quand ils n'ont aucune différence entre les instances de la classe, sauf qu'il est préférable d'initialiser tout ce qu'il faut dans le constructeur (statique ou pas).

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

Discussions similaires

  1. destruction d'une classe qui herite de CDialog
    Par philippe V dans le forum MFC
    Réponses: 2
    Dernier message: 03/02/2004, 17h39
  2. Réponses: 14
    Dernier message: 15/01/2004, 01h15
  3. Conception d'une classe parente
    Par VincentB dans le forum Langage
    Réponses: 9
    Dernier message: 24/06/2003, 17h28
  4. Variable d'une Classe Ancêtre
    Par Génie dans le forum Langage
    Réponses: 3
    Dernier message: 18/09/2002, 19h24
  5. Sortir un typedef d'une classe
    Par Theophil dans le forum C++Builder
    Réponses: 13
    Dernier message: 03/07/2002, 17h21

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